Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Reactjs+;ASP MVC不引人注目的验证_Javascript_Asp.net Mvc 4_Unobtrusive - Fatal编程技术网

Javascript Reactjs+;ASP MVC不引人注目的验证

Javascript Reactjs+;ASP MVC不引人注目的验证,javascript,asp.net-mvc-4,unobtrusive,Javascript,Asp.net Mvc 4,Unobtrusive,我有下一个密码 componentDidMount() { super.componentDidMount(); let jobj = $(ReactDOM.findDOMNode(this)); $.validator.unobtrusive.parse(jobj); } 运行此操作后,我得到错误:uncaughttypeerror:无法读取未定义的属性“unobtrusive” 如何使导入ASP MVC不引人注目,并进行jquery验证?从错误中可以看出,$.val

我有下一个密码

componentDidMount() {
    super.componentDidMount();
    let jobj = $(ReactDOM.findDOMNode(this));
    $.validator.unobtrusive.parse(jobj);
}
运行此操作后,我得到错误:uncaughttypeerror:无法读取未定义的属性“unobtrusive”


如何使导入ASP MVC不引人注目,并进行jquery验证?

从错误中可以看出,$.validator尚未连接

在呈现React组件之前,检查是否遗漏了jquery.validate.min.js(请参阅)

关于使用ASP.NETMVC和非结构化,这也是我过去几天一直在研究的问题。让我分享一下我对此的一些初步想法:

使用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>
    );
}
});
var TextInputComponent=React.createClass({
render(){
返回(
);
}
});
问题空间

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

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

  • 使用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;
    }
    
    public static IDictionary UnobtrusiveValidationAttribute for(此HtmlHelper html,表达式属性Expression)
    {
    var propertyName=html.NameFor(propertyExpression.ToString();
    var metadata=modelmetada.FromLambdaExpression(propertyExpression,html.ViewData);
    var attributes=html.getUnobtrusiveValidationAttribute(propertyName,元数据);
    返回属性;
    }
    
  • 将此方法输出到JSON或Javascript对象中,并将其分配给Javascript变量(全局变量或作用域为ReactDOM.render方法)

  • 使用JSX spread特性将(2)中的变量包含为道具。(见附件)


  • 简言之,为了有一个完整的ASP.NET验证表单,我们需要告诉ReactJS组件所有必要的数据val-*info。

    感谢您的回复,我解决了这个窗口这样的问题。$.validator.unobtrusive.parse(jobj);而是$.validator.unobtrusive.parse(jobj);“你的发现有什么结果,@ronnypm?”?