Jas*_*son 7 c# validation asp.net-mvc-2 knockout.js
我正在使用MVC2.
什么是使用淘汰赛时推荐的表单服务器端验证方式?
目前,我的大部分表单都是部分视图,其中包含带有验证属性的C#ViewModel.像这样的东西:
public class SomeThingViewModel
{
[Required]
public string Name { get; set; }
[Required]
public int Number{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)
因此,当表单会提交到服务器,我得到的所有的模型错误,我可以有错误,这是显示的东西,如返回的形式为:<%: Html.ValidationMessageFor(m => m.Name)%>.然后将其重新加载到保存主页面上的表单的元素中,以便用户可以看到错误.这会杀死我所假设的淘汰形式的任何绑定.
我真的不确定如何使用淘汰赛来解决这个问题.
这可能很棘手,但如果做得好,效果会轻而易举。
\n\n首先,同步您的视图模型。淘汰赛中客户端的内容将准确地传递到服务器。其次,不要对服务器端 HTML 进行淘汰。创建在服务器端设置并在客户端读取的字段,以指示 ViewModel 中每个数据字段的有效性。
\n\n因此,如果您的 Model 有一个 field Name,您的 ViewModel 有Name一个 和Name_ValidationResult,它是一个枚举,指示 Name 字段是否有效以及为什么无效。如果服务器端验证失败,请设置验证结果字段,并将整个服务器端 ViewModel 传递回客户端,以便在请求完成后重新设置为客户端 ViewModel。基本上,您需要重新创建 ASP.NET 的 ViewState 部分,但采用可与 Knockout.js 配合使用的格式
在客户端,您的错误消息仅根据ValidationResult字段的值显示。因此,您可能会看到一条预设的错误消息,指出“必须设置名称字段”,仅当Name_ValidationResult值为“空”(例如)时才会显示。
基本上,您实际上使用了 MVVM 模式,并进行了一些细微的调整,以解决必须往返服务器的问题。
\n\n\n\n\n因此,您建议我在 C# ViewModel 中为每个属性添加 ValidationResult 字段。然后,当我检查模型的有效性时,在控制器中设置 ValidationResult 属性。然后将视图模型作为 JSON 传回?这样我就可以更新我的淘汰视图模型。这将需要我在某种程度上手动验证,对吧?或者我可以利用最终会出现的 ModelState 错误吗?\xe2\x80\x93 布兰卡龙
\n
底线是你所有的问题。
\n\n事实上,我错过了您使用 DataAnnotations 进行验证的事实,否则我会提到它。您应该能够利用 ModelState 错误来设置您传递回剔除页面的验证结果。
\n\n问题在于,您正在使用两种根本不兼容的技术,并希望它们能够很好地协同工作,但我认为这不会按照您希望的方式进行。必须付出一些代价,我建议最好的办法是服务器端。喝下绝妙的清凉饮料并修复服务器端的问题。
\n| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |