我的问题:
我无法让数据注释客户端验证在我的viewdata类中使用List。
瘦子:
在我的视图数据类中,我有一个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; }
}
在View I中循环列表如下: ...
<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>
结果:
有趣的是,当我在第一个文本框上触发验证时,它会同时触发所有文本框。其余的文本框根本不会触发验证。
注意文本框及其相应的错误文本span元素的所有生成的id和名称都是相同的。
有没有人知道如何在视图数据中使用客户端验证与列表支持ModelBinding ?
谢谢!
答案 0 :(得分:2)
<div>
<%= Html.TextBoxFor(model => model.people[i].FirstName) %>
<%= Html.ValidationMessageFor(model => model.people[i].FirstName) %>
</div>
这是正确的方法,但它现在已经被打破了,并将在下一滴中修复。