2


0

ASP.Net MVC 2 RC:リストのデータ注釈でクライアント検証を使用する方法

私の問題:

viewdataクラスのListで動作するData Annotations Client Validationを取得できません。

スキニー

ビューデータクラスにはリストがあります。

public class FriendsViewData
{
    public List people { get; set; }
}

データ注釈を使用して、必要に応じてクラスPersonのすべてのプロパティを持っています。

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

ビューでは、次のようにリストをループします:…​

<% Html.EnableClientValidation(); %>

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

<%
   for(int i=0; i < Model.people.Count; i++)
   {%>

         <%= Html.TextBox(string.Format("people[{0}].FirstName",i), Model.people[i].FirstName)%>
         <%= Html.ValidationMessage(string.Format("people[{0}].FirstName", i))%>

<% } %>



<% } %>

*生成されたHTML *:


結果

まったく機能しませんでした。

私が試した他のこと:

代わりにビューでこれらのHTMLヘルパーメソッドを使用してみました:

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

生成された出力:


結果

興味深いことに、*最初の*テキストボックスで検証をトリガーすると、すべてのテキストボックスで同時に検証が実行されます。 残りのテキストボックスは検証をまったくトリガーしません。

テキストボックスに生成されたすべてのIDと名前、およびそれらに対応するエラーテキストスパン要素はすべて同一であることに注意してください。

ビューデータのリストでクライアント検証を使用する方法を知っていますか?ModelBindingをサポートしますか?

ありがとうございます。

1 Answer


2


ASP.NetチームのBrad Wilsonは、ASP.Netフォーラムで同じ質問に答えました。

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

これは正しい方法ですが、今は壊れており、次のドロップで修正される予定です。