MVC3 - 复杂模型,属性具有相同的字段名称,无法呈现模型

时间:2011-11-23 19:41:25

标签: asp.net-mvc-3 model

我需要帮助渲染复杂的模型。

我有一个包含2个类属性的复杂模型。所有3个类(AddProjectQnrModel,ProjectModel,QTModel)都具有GroupId和GroupName属性。

public class AddProjectQnrModel
    {
        [Required]
        public int GroupId { get; set; }

        public string GroupName { get; set; }

        public ProjectModel Project { get; set; }

        public QCTModel QCT { get; set; }
    }

在视图中我使用的是编辑器模板:

@Html.EditorFor(x => x.Project, "_EditProject.cshtml")
@Html.EditorFor(x => x.QCT, "_QCT-v1.cshtml")

我不能使用@ html.Partial,因为它不会正确绑定属性,所以我必须使用编辑器模板。

在运行项目时出现此错误:

  

不显眼的客户端验证规则中的验证类型名称必须是   独特。以下验证类型不止一次出现:   需要

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.InvalidOperationException:验证类型   不引人注目的客户端验证规则中的名称必须是唯一的。该   以下验证类型被多次出现:必需

Source Error: 

Line 26: 
Line 27:         @Html.EditorFor(x => x.Project, "_EditProject.cshtml")
Line 28: 
Line 29:         

1 个答案:

答案 0 :(得分:6)

我认为你遇到了与this issue类似的事情。

MVC会自动为GroupId添加必需的验证,因为int不是可空类型。当您添加[Required]的显式规范时,验证将重复并导致您的错误。删除任何本质上不可为空的属性的显式[Required]属性,并且事情应该按预期工作。

或者,如果您想阻止自动生成支持明确的[Required]声明,您可以将以下内容添加到Application_Start,如此{{3 }}:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false