2

我的问题:ASP.Net MVC 2 RC:如何使用客户端验证和列表的数据注释?

我不能得到数据注释客户端验证与我的可视数据类的List工作。

的瘦

在我看来,数据类我有一个列表。

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

我使用Data Annotations根据需要拥有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辅助方法的尝试:

<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> 

结果

有趣的是,当我触发对第一个文本框的验证时,它会同时触发所有文本框。其余的文本框根本不触发验证。

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

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

谢谢!

回答

2

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

+2

ASP.Net MVC 2 RC今日被释放,这种错误是固定的。 – 2010-02-05 14:07:32

相关问题