私の問題:
ビューデータ クラスのリストを操作するための Data Annotations Client Validation を取得できません。
スキニー:
私のビューデータクラスにはリストがあります。
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 ヘルパー メソッドを使用してみました。
<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 と名前、およびそれらに対応するエラー テキスト スパン要素はすべて同一であることに注意してください。
ModelBinding をサポートして、ビュー データのリストで Client Validation を使用する方法を知っている人はいますか?
ありがとう!