在.NET MVC2中使用Knockoutjs和服务器端验证
我正在使用MVC2。
什么是使用敲除时服务器端验证表单的推荐方式?
目前,我的大多数表单都在部分视图中,其中包含具有验证属性的C#ViewModel。 像这样的东西:
public class SomeThingViewModel
{
[Required]
public string Name { get; set; }
[Required]
public int Number{ get; set; }
}
所以当表单被提交给服务器时,我得到了所有的模型错误,并且可以返回带有错误的表单,这些错误显示如下:<%: Html.ValidationMessageFor(m => m.Name)%>
。 然后将其重新加载到主页上保存表单的元素,以便用户可以看到错误。 这会杀死我在假设的基因敲除时遇到的任何绑定。
我真的不知道如何去使用淘汰赛。
这可能会很棘手,但做得很对,就像轻而易举。
首先,同步您的视图模型。 你有什么客户端在淘汰赛中完全通过服务器。 其次,不要用淘汰赛做服务器端的HTML。 创建服务器端设置的字段并读取客户端,以指示ViewModel中每个数据字段的有效性。
因此,如果您的模型具有字段Name
,则您的ViewModel具有Name
和Name_ValidationResult
,这是一个枚举,用于指示名称字段是否有效,以及为什么不是。 如果您的服务器端验证失败,请设置验证结果字段并将整个服务器端ViewModel传递回客户端,以在请求完成后重新设置为客户端ViewModel。 基本上,您重新创建了ASP.NET的ViewState部分,但是这样做的格式可以与Knockout.js一起使用
在客户端,您只能根据ValidationResult
字段的值显示错误消息。 因此,您可能会收到一条说明“名称字段必须设置”的预设错误消息,该消息仅在Name_ValidationResult
的值为“空”(例如)时才会显示。
基本上,你实际上使用MVVM模式进行小小的调整来说明必须往返服务器。
所以你建议我在每个属性的C#ViewModel中添加ValidationResult字段。 然后当我检查模型的有效性时,在我的控制器中设置ValidationResult属性。 然后传回视图模型为JSON? 以便我可以更新我的淘汰赛视图模型。 这将需要我在某种程度上手动验证是否正确? 或者我可以利用ModelState错误,我将最终? - Blankasaurus
底线是所有的问题。
事实上,我错过了使用DataAnnotations进行验证的事实,或者我已经提到过它。 您应该能够利用ModelState错误来设置您返回到挖空页面的验证结果。
问题在于你正在使用两种基本不兼容的技术,并希望他们能够一起表现出色,我不认为这会按照你希望的方式发挥作用。 有些东西将不得不提供,我建议最好的一点是服务器端。 喝掉淘汰的冷却助剂并修复你的服务器端。
链接地址: http://www.djcxy.com/p/57315.html上一篇: Using Knockoutjs And Server Side Validation in .NET MVC2
下一篇: How to find the definition of an operator in the python source code?