Html 使用MVC数据注释和不引人注目的验证做出反应

Html 使用MVC数据注释和不引人注目的验证做出反应,html,reactjs,asp.net-mvc,validation,asp.net-mvc-4,Html,Reactjs,Asp.net Mvc,Validation,Asp.net Mvc 4,我们目前正在尝试使用现代前端框架,比如在MVC4项目上使用react。我们在模型中使用数据注释,我们有很多表单在UI上使用不引人注目的验证 主要的事情是找到一种使用react生成内容的方法,同时仍然能够利用诸如不引人注目的验证之类的功能。据我所知,它实际上只是使用HTML帮助程序(如TextAreaFor,ValidationMessageFor)时动态生成的一组data val属性,这些属性从模型类中的数据注释中获取值 我试过几件事,包括 ReactDOM.render( @using (

我们目前正在尝试使用现代前端框架,比如在MVC4项目上使用react。我们在模型中使用数据注释,我们有很多表单在UI上使用不引人注目的验证

主要的事情是找到一种使用react生成内容的方法,同时仍然能够利用诸如不引人注目的验证之类的功能。据我所知,它实际上只是使用HTML帮助程序(如
TextAreaFor
ValidationMessageFor
)时动态生成的一组
data val
属性,这些属性从模型类中的数据注释中获取值

我试过几件事,包括

 ReactDOM.render(
 @using (Html.BeginForm("xyz", "xyz", FormMethod.Post))
 {
      @Html.TextBoxFor(x => x.Email)
这会导致输入框由于某种原因不可编辑

我更喜欢做像这样的事情

 ReactDOM.render(
      <form><input type="text" data-val="@Model.datannotations[1].val" /></form>
ReactDOM.render(

这可能吗?如何从模型中获取
数据val
值?实现这一点的最佳方法是什么?

这应该是不可能的

这是开发ui的两种不同方法。 razor的方法是在服务器端预处理标记代码以填充它

如果react在另一个使用生命周期方法的流中工作,那么您应该已经加载了data anotations值,以便在渲染时访问它

因此,要实现这一点,您必须首先运行razor引擎来填充标记,然后使用react引擎。 我不建议使用这种方法,因为在它上面开发太难了,开发人员团队在开发时必须记住这个流程

注意这一点


ReactDOM.render()
据我所知,这些.net功能使用控件吐出html,这对React不起作用,因为React使用虚拟DOM跟踪其状态,对服务器端框架生成的标记不起作用。这与jQuery非常不同,后者通常通过静态html或se呈现初始DOM服务器端语言,然后从那里学习jQuery。虽然我喜欢React,但我不认为它是这种类型应用程序的特别好的候选者。它在用于构建与API通信的独立客户端堆栈时效果最好。我不熟悉React,但您是否使用ReactJS.Net?如果不是,我建议从那里开始。你肯定想要某种东西将你的模型数据从C#MVC中的M连接到React中的V。后端验证总是很重要的,对吗?所以你仍然需要模型中的数据注释。而且你也不想手动将工作从模型复制到视图,所以我对
数据值持怀疑态度="@Model.data…
。这些内容应该是动态生成的。就我个人而言,我使用rich EditorFor模板,将标签、验证和控制元素打包在一起。这有助于在整个应用程序中为我的表单元素提供一致的感觉,并使视图维护非常简单。同一操作不能有两个主控形状M.你可能可以把一个喇叭换成另一个喇叭,但你只需选择一个就可以省去很多麻烦,我建议你选择React。不引人注目的验证本身就是一种痛苦。使用React,你有许多React表单解决方案,可以以更无摩擦的方式处理验证。react应用程序是在静态页面上加载react,并调用api来加载数据。因此,理想情况下,前端和后端是完全分开的。(前端处理显示数据和对用户输入作出反应,后端决定如何处理数据,但对表示逻辑一无所知。)这是一种不同于大多数MVC应用程序的设计风格,在MVC应用程序中,后端处理一些视图问题和数据问题。有一些方法可以弥补这一差距,但要意识到,这是一种不同于您可能习惯的思维方式。。。