【问题标题】:Model Validation problem when render same model twice pn same page在同一页面上两次渲染相同模型时的模型验证问题
【发布时间】:2011-08-25 00:52:38
【问题描述】:

我正在使用 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 => m.FirstName) @Html.ValidationMessageFor(Model.Prefix, m => m.FirstName)

@Html.LabelFor(Model.Prefix, m => m.MiddleName, "中间名首字母") @Html.TextBoxFor(Model.Prefix, m => m.MiddleName) @Html.ValidationMessageFor(Model.Prefix, m => m.MiddleName)
@Html.LabelFor(Model.Prefix, m => m.LastName, "Last Name") @Html.TextBoxFor(Model.Prefix, m => m.LastName) @Html.ValidationMessageFor(Model.Prefix, m => m.LastName)

我使用的验证模型如下

[RequiredIf(ErrorMessage="请输入名字")] [StringLength(15, ErrorMessage = "超出最大字符限制")] [RegularExpression(@"^[a-zA-Z0-9 ]+(([\'\,.-][a-zA-Z0-9 ])?[a-zA-Z0-9 ]) $", ErrorMessage = "名字不正确")] 公共字符串名字 { 获取;放; }

    [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; }

确切的问题是,我使用相同的模型对申请人和共同申请人进行验证。但是当页面渲染验证实际上仅适用于第一个申请人时。

当我检查查看源代码时 仅为申请人呈现的验证相关代码。

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

请提出您有的任何解决方案。

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 使用此方案,模型中的所有属性都以html形式呈现在表单上。我想使用 _customer.cshtml 作为模板。
    【解决方案2】:

    A 确实在我的 .cshtml 文件中添加了以下行,它现在可以工作了。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 2016-11-18
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      相关资源
      最近更新 更多