在同一页面上两次渲染相同模型时的模型验证问题

时间:2011-05-13 15:09:07

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

我正在使用MVC 3.0

我的问题是在一个页面上我使用相同的模型两次进行一些验证。但客户端验证只适用于第一个模型。

我的视图中的代码是

 @using (Html.BeginDTPanel("Applicant"))
        {
         <text>
            @Html.Partial("~/areas/common/views/shared/_customer.cshtml", Model.Applicant)
         </text>    
        }

        @{ var state = Model.Mode == ActionMode.Edit && Model.CoApplicant.TaxIdentifierLastFour != null ? "expanded" : "collapsed"; }
        @using (Html.BeginDTPanel("Co-applicant", state))
        {
         <text>
            @Html.Partial("~/areas/common/views/shared/_customer.cshtml", Model.CoApplicant)
         </text>    
        }

_Customer.cshtml代码类似

@Html.LabelFor(Model.Prefix, m => m.FirstName, "First Name")

@ Html.TextBoxFor(Model.Prefix,m =&gt; m.FirstName) @ Html.ValidationMessageFor(Model.Prefix,m =&gt; m.FirstName)

@ Html.LabelFor(Model.Prefix,m =&gt; m.MiddleName,“Middle Initial”) @ Html.TextBoxFor(Model.Prefix,m =&gt; m.MiddleName) @ Html.ValidationMessageFor(Model.Prefix,m =&gt; m.MiddleName)
@ Html.LabelFor(Model.Prefix,m =&gt; m.LastName,“姓氏”) @ Html.TextBoxFor(Model.Prefix,m =&gt; m.LastName) @ Html.ValidationMessageFor(Model.Prefix,m =&gt; m.LastName)

我使用的验证模型如下

[RequiredIf(ErrorMessage =“请输入名字”)]         [StringLength(15,ErrorMessage =“超出最大字符限制”)]         [RegularExpression(@“^ [a-zA-Z0-9] +(([\'\ ,, .-] [a-zA-Z0-9])?[a-zA-Z0-9] $“,ErrorMessage =”不正确的名字“)]         public string FirstName {get;组; }

    [StringLength(1, ErrorMessage = "Maximum character limit exceeded")]
    [RegularExpression(@"^[a-zA-Z ]$", ErrorMessage = "Incorrect Middle Initial")]
    public string MiddleName { get; set; }

    [RequiredIf(ErrorMessage = "Please Enter Last Name")]
    [StringLength(25, ErrorMessage = "Maximum character limit exceeded")]
    [RegularExpression(@"^[a-zA-Z0-9 ]+(([\'\,\.\-][a-zA-Z0-9 ])?[a-zA-Z0-9 ]*)*$", ErrorMessage = "Incorrect Last Name")]
    public string LastName { get; set; }

    [RequiredIf(ErrorMessage = "Please Enter SSN")]
    [StringLength(11, ErrorMessage = "Maximum character limit exceeded")]
    [SouciaSecurityNumber(ErrorMessage ="Invalid SSN")]
    [RegularExpression(@"^([0-9]\d{2}|7[0-6]\d|77[0-2])([ \-]?)(\d{2})\2(\d{4})$", ErrorMessage = "InValid SSN")]
    public string TaxIdentifier { get; set; }

确切的问题在这里我使用相同的模型与申请人和共同申请人的验证。但是,当页面呈现验证仅适用于第一个申请人时。

当我查看视图来源时 验证相关代码仅为申请人提供。

但是我需要为这两种模式应用验证。

请建议你有任何解决方案。

由于

2 个答案:

答案 0 :(得分:2)

使用编辑器模板而不是标准部分。基本上只需将_customer.cshtml移至/Shared/EditorTemplates/Customer.cshtml,然后使用

@Html.EditorFor(m => m.Applicant)
@Html.EditorFor(m => m.CoApplicant)

答案 1 :(得分:0)

A确实在我的.cshtml文件中添加了以下内容。

@ {ViewData.TemplateInfo = new System.Web.Mvc.TemplateInfo {HtmlFieldPrefix = Model.Prefix}; }