客户端验证不使用ASP.NET MVC 2中的子属性?

时间:2010-03-02 12:22:10

标签: jquery asp.net-mvc

我有一个名为 User 的对象,其属性为 Name ,并带有必需属性。

public class User
{
     public int Id { get; set; }

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

我创建了一个文本框,如下所示:

<%= Html.TextBoxFor(model => model.Name) %>

启用客户端验证时,名称是完全验证的客户端。

但是,如果我创建一个ViewModel,其中User现在是一个属性

public class UserModel
{
     public User TheUser { get; set; }
     public string SomeOtherProperty { get; set; }
}

并创建我的文本框

<%= Html.TextBoxFor(model => model.TheUser.Name) %>

然后客户端验证失败。在没有客户验证的情况下发布表单会收到错误。

看起来javascript window.mvcClientValidationMetadata 像以前一样被填满,没有明显的区别。

是什么给出的?有什么我需要做的吗?

我正在使用

  • ASP.NET MVC 2 RC2(使用.NET 3.5 / VS2008)
  • 来自最新期货下载的MicrosoftMvcJQueryValidation.js

修改

仔细检查 window.mvcClientValidationMetadata 未按预期填写。没有指定ValidationRules:

{"FieldName":"TheUser.Name","ReplaceValidationMessageContents":true,"ValidationMessageId":"TheUser_Name_validationMessage","ValidationRules":[]}

1 个答案:

答案 0 :(得分:0)

您应该为类User创建一个编辑器模板。加载它 Html.EditorFor(model =&gt; model.User,“User”),“User”是编辑器模板的名称。

用户类应该是此编辑器模板的视图模型。

然后,在用户的编辑器模板中,调用编辑器模板以获取其属性。

MVC开箱即用的客户端验证应该可以正常使用。