2012-01-31 77 views
7

我正在使用MVC2。在.NET MVC2中使用Knockoutjs和服务器端验证

请告诉我使用淘汰赛时的表单服务器端验证的推荐的方法?

目前,我大部分的形式是局部视图,其中有一个C#视图模型与验证属性。事情是这样的:

public class SomeThingViewModel 
{ 
    [Required] 
    public string Name { get; set; } 

    [Required] 
    public int Number{ get; set; } 
} 

所以当表单被提交到服务器,我得到的所有的模型错误,我可以有错误,这是显示的东西,如交回:<%:Html.ValidationMessageFor(m => m.Name)%>。然后将其重新加载到主页上保存表单的元素,以便用户可以看到错误。这会杀死我在假设的基因敲除时遇到的任何绑定。

我不确定如何去使用淘汰赛。

+0

很高兴听到您选择您的项目的任何可能的解决方案,以便如何使用客户端中的knockoutjs处理服务器端验证检查。请分享作为下面的答案或作为评论。我太困惑了! – 2013-12-04 16:56:44

回答

4

这可能会很棘手,但做得对,就像一阵轻而易举的事情。

首先,同步您的视图模型。你有什么客户端在淘汰赛中完全通过服务器。其次,不要使用敲除做服务器端HTML。创建服务器端设置的字段并读取客户端,以指示ViewModel中每个数据字段的有效性。

所以,如果你的模型有一个字段Name,您的视图模型具有NameName_ValidationResult,这是一个枚举,指示名称字段是否是有效的,为什么它不是。如果您的服务器端验证失败,请设置验证结果字段并将整个服务器端ViewModel传递回客户端,以在请求完成后重新设置为客户端ViewModel。基本上,你重新创建了ASP.NET的ViewState部分,但是这样做的格式可以与Knockout.js配合使用。

在客户端,你有错误消息只显示基于ValidationResult字段。因此,您可能会收到一条错误消息,指出“必须设置名称字段”,该字段仅在Name_ValidationResult的值为“空”(例如)时才会显示。

基本上,你实际上使用MVVM模式进行小小的调整来说明必须往返服务器。

所以你建议我在每个属性的C#ViewModel中添加ValidationResult字段。然后当我检查模型的有效性时,在我的控制器中设置ValidationResult属性。然后传回视图模型为JSON?以便我可以更新我的淘汰赛视图模型。这将需要我在某种程度上手动验证是否正确?或者我可以利用ModelState错误,我将最终? - Blankasaurus

底线是所有的问题。

说实话,我错过了你正在使用DataAnnotations为您验证的事实,或者我会提到它。您应该能够利用ModelState错误来设置您返回到挖空页面的验证结果。

的问题是,你使用的两种根本不兼容的技术,并希望他们会发挥好在一起,我不认为这将制定出你希望的方式。有些东西将不得不提供,我建议最好的一点是服务器端。喝掉淘汰的冷却助剂并修复你的服务器端。

+0

所以你建议我在每个属性的C#ViewModel中添加ValidationResult字段。然后当我检查模型的有效性时,在我的控制器中设置ValidationResult属性。然后传回视图模型为JSON?以便我可以更新我的淘汰赛视图模型。这将需要我在某种程度上手动验证是否正确?或者我可以利用ModelState错误,我将最终? – Jason 2012-01-31 21:02:31

+1

+1有趣的解决方案 – 2012-01-31 21:16:35

+0

我可能对晚会有点迟,但我有点困惑..你是说他/我们应该抛出服务器端验证,并通过淘汰赛进行验证?这不危险吗?或者我误解了你? ^^ – Pharao2k 2012-08-31 10:59:01