問題は、同じタイプの2つのコントロールをページに配置するときに、バインディングに異なるプレフィックスを指定する必要があることです。この場合、フォームの直後に生成された検証ルールは正しくありません。では、このケースでクライアント検証を機能させる方法は?:
ページに含まれるもの:
<%
Html.RenderPartial(ViewLocations.Shared.PhoneEditPartial, new PhoneViewModel { Phone = person.PhonePhone, Prefix = "PhonePhone" });
Html.RenderPartial(ViewLocations.Shared.PhoneEditPartial, new PhoneViewModel { Phone = person.FaxPhone, Prefix = "FaxPhone" });
%>
コントロールViewUserControl<PhoneViewModel>:
<%= Html.TextBox(Model.GetPrefixed("CountryCode"), Model.Phone.CountryCode) %>
<%= Html.ValidationMessage("Phone.CountryCode", new { id = Model.GetPrefixed("CountryCode"), name = Model.GetPrefixed("CountryCode") })%>
ここでModel.GetPrefixed("CountryCode")
、プレフィックスに応じて「FaxPhone.CountryCode」または「PhonePhone.CountryCode」を返します。
フォームの後に生成される検証ルールは次のとおりです。これらは、フィールド名「Phone.CountryCode」に対して複製されます。望ましい結果は、FieldNames "FaxPhone.CountryCode"、 "PhonePhone.CountryCode" alt text http://www.freeimagehosting.net/uploads/37fbe720bf.pngごとに2つのルール(必須、番号)です。
質問は、Asp.Net MVC2クライアントサイド検証と重複IDの問題と多少重複 していますが、IDを手動で生成することは役に立ちません。