使用子属性进行MVC客户端验证

时间:2010-12-23 11:12:02

标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-3

拥有以下课程:

public class MyObjB {
     [Required(ErrorMessage = "I need it")]
     public string Name { get; set; }
}

public class MyObjA {
     [Required(ErrorMessage = "I need it")]
     public string Name { get; set; }

     public MyObjB MyObjB { get; set; }
}

视图:将模型用作MyObjA

@{ Html.EnableClientValidation(); }
@{Html.BeginForm();}
@Html.ValidationSummary("Some errors") @Html.AntiForgeryToken()
    // MyObjA part
    @Html.LabelFor(model => model.Name):
    @Html.TextBoxFor(model => model.Name) 
    @Html.ValidationMessage("Name", "*")

    // MyObjB part
    @Html.LabelFor(model => model.MyObjB.Name):
    @Html.TextBoxFor(model => model.MyObjB.Name) 
    @Html.ValidationMessage("MyObjB.Name", "*")
@{ Html.EndForm(); }

EnableClientValidation不起作用.... 我认为这与“。”有关。 (点)使用和javacript的问题,但我可能是错的,原因是不同的。

如果我使用相同的表单,但仅用于MyObjB,它将正常工作并且ClientValidation正确完成。

您如何将EnableClientValidation与子属性一起使用?

谢谢。

编辑1 - 对于字节请求

查看:

@Html.TextBoxFor(model => model.MyObjB.Name) 

HTML结果:

<input id="MyObjB_Name" name="MyObjB.Name" type="text" value="" />

3 个答案:

答案 0 :(得分:0)

我认为你必须在web.config中使用以下内容:

     <appSettings>
    <add key="ClientValidationEnabled" value="true"/>
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

答案 1 :(得分:0)

只要您在objA中对objB进行引用和初始化,它就会起作用,因为您的视图模型是ObjA

答案 2 :(得分:-1)

您需要做的是为您的视图创建一个viewmodel 它将具有A类和B类属性

public class ViewModelAB
{
    [validation error message]  
    A PropertyA { get; set; }

    [validation error message]  
    B PropertyB { get; set;}
}

并将此viewmodel模型strogly类型用于您的视图