【问题标题】:ASP.Net MVC 2 RC: How To Use Client Validation with Data Annotations for Lists?ASP.Net MVC 2 RC:如何使用客户端验证和列表的数据注释?
【发布时间】:2011-01-09 16:31:39
【问题描述】:

我的问题:

我无法让数据注释客户端验证与我的 viewdata 类中的列表一起使用。

瘦子

在我的视图数据类中,我有一个列表。

public class FriendsViewData
{
    public List<Person> people { get; set; }
}

我拥有使用数据注释所需的 Person 类的所有属性。

public class Person
{
    [Required(ErrorMessage="First Name is required")]
    public string FirstName { get; set; }
}

在视图中,我像这样循环列表: ...

<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script>

<% Html.EnableClientValidation(); %>

<% using (Html.BeginForm()) {%>

<%
   for(int i=0; i < Model.people.Count; i++)
   {%>
       <div>
         <%= Html.TextBox(string.Format("people[{0}].FirstName",i), Model.people[i].FirstName)%>
         <%= Html.ValidationMessage(string.Format("people[{0}].FirstName", i))%>
       </div>
<% } %>

<input type="submit" value="Submit" />

<% } %>

生成的 HTML

<div>
    <input id="people_0__FirstName" name="people[0].FirstName" type="text" value="Name0" />
    <span class="field-validation-valid" id="form0_people_0__FirstName_validationMessage"></span>     
</div>

<div>
    <input id="people_1__FirstName" name="people[1].FirstName" type="text" value="Name1" />
    <span class="field-validation-valid" id="form0_people_1__FirstName_validationMessage"></span>     
</div>

<div>
    <input id="people_2__FirstName" name="people[2].FirstName" type="text" value="Name2" />
    <span class="field-validation-valid" id="form0_people_2__FirstName_validationMessage"></span>     
</div>

结果

根本没用。

我尝试过的其他方法:

尝试在视图中使用这些 HTML Helper 方法:

    <div>
        <%= Html.TextBoxFor(model => model.people[i].FirstName) %>
        <%= Html.ValidationMessageFor(model => model.people[i].FirstName) %>
    </div>

生成的输出:

       <div>  
           <input id="FirstName" name="FirstName" type="text" value="Name0" />  
           <span class="field-validation-valid" id="form0_FirstName_validationMessage"></span>  
       </div>  

       <div>  
           <input id="FirstName" name="FirstName" type="text" value="Name1" />  
           <span class="field-validation-valid" id="form0_FirstName_validationMessage"></span>  
       </div>  

       <div>  
           <input id="FirstName" name="FirstName" type="text" value="Name2" />  
           <span class="field-validation-valid" id="form0_FirstName_validationMessage"></span>  
       </div> 

结果

有趣的是,当我在 first 文本框上触发验证时,它会同时为所有文本框触发。其余的文本框根本不会触发验证。

请注意,所有为文本框生成的 id 和名称及其对应的错误文本 span 元素都是相同的。

有谁知道如何在视图数据中使用带有列表的客户端验证,支持 ModelBinding

谢谢!

【问题讨论】:

    标签: asp.net-ajax asp.net-mvc-2 data-annotations asp.net-mvc-2-validation


    【解决方案1】:

    来自 ASP.Net 团队的 Brad Wilson 在 ASP.Net 论坛中回答了我同样的问题。

      <div>  
           <%= Html.TextBoxFor(model => model.people[i].FirstName) %>  
           <%= Html.ValidationMessageFor(model => model.people[i].FirstName) %>  
      </div>  
    

    这是正确的做法,但它现在坏了,将在下一个版本中修复。

    http://forums.asp.net/t/1518900.aspx

    【讨论】:

    • ASP.Net MVC RC 2 已于今天发布,此错误已修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多