javascript - Reactjs + ASP MVC 不显眼的验证

标签 javascript asp.net-mvc-4 unobtrusive

我有下一个代码

componentDidMount() {
    super.componentDidMount();
    let jobj = $(ReactDOM.findDOMNode(this));
    $.validator.unobtrusive.parse(jobj);
}

运行此命令后,我收到错误:Uncaught TypeError:无法读取未定义的属性“unobtrusive”

如何使导入 ASP MVC 不显眼并进行 jquery 验证?

最佳答案

从错误来看,$.validator 尚未附加。

在渲染 React 组件之前检查是否错过了 jquery.validate.min.js(请参阅 here )。

关于使用ASP.NET MVC和unobtrusive,这也是我这几天一直在研究的一个问题。让我分享一些我对此的初步想法:

React 验证开箱即用

从不显眼的验证的工作原理来看,只要您增强 JSX 或 TSX(Typescript v1.6+) 或使用 data-val-* 属性来 react 脚本,不显眼的插件就会为您带来魔力。

var TextInputComponent = React.createClass({
    render() {        
    return (
        <div>
            <input data-val="true" data-val-required="error msg" name="Test" type="text" />
            <span className="text-danger"  data-valmsg-replace="true" data-valmsg-for="Test"></span>
        </div>
    );
}
});

问题空间

问题是我们(ASP.NET MVC 开发人员)习惯于让 Razor 通过 @Html.TextFor(...) 方法(及其其他输入类型的变体)为我们生成所有属性。现在我们需要传递这些属性给ReactJS组件,以便它们知道如何验证特定字段。

我计划测试以下是否有效:

  1. 使用 HtmlHelper 的 GetUnobtrusiveValidationAttributes 方法获取与 ViewModel 元数据相关的所有属性。像这样的扩展方法:

    public static IDictionary<string, object> UnobtrusiveValidationAttributesFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> propertyExpression)
    {
        var propertyName = html.NameFor(propertyExpression).ToString();
        var metadata = ModelMetadata.FromLambdaExpression(propertyExpression, html.ViewData);
        var attributes = html.GetUnobtrusiveValidationAttributes(propertyName, metadata);
        return attributes;
    }
    
  2. 将此方法输出到 JSON 或 Javascript 对象中,并将其分配给 Javascript 变量(全局变量或作用域为 ReactDOM.render 方法)

  3. 使用 JSX 扩展功能将 (2) 中的变量包含为 props。 (参见here)

简而言之,要获得具有 ASP.NET 验证的完整表单,我们需要告诉 ReactJS 组件所有必要的 data-val-* 信息。

关于javascript - Reactjs + ASP MVC 不显眼的验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33764406/

相关文章:

javascript - Google Maps JavaScript API v3 无法正常工作

javascript - Gulp 监视任务不会在 Ctrl C 上退出

javascript - 如何在MVC4 Jquery Ajax请求中运行 "success"函数?

NServiceBus 不显眼的约定 DefineCommandsAs 多次

ruby-on-rails - 尝试访问时不引人注意地为关联创建记录?

javascript - 需要帮助让我的 Javascript 不引人注目

javascript - SAPUI5:当某些东西被破坏时函数 Hook

javascript - 自动将 float div 的宽度固定为图像大小

c# - 表单例份验证和授权 MVC 4

c# - MVC传模型来查看