これが状況です。ネストされた複雑なモデルタイプを含むViewModelがいくつかあります。モデルの1つのスニペットを次に示します(これは完全なクラスではありません)。
/// <summary>
/// Defines the overall view when viewing contact details.
/// </summary>
public sealed class ContactDetailsViewModel : BaseViewModel
{
public ContactDetailsViewModel() : base() { }
public ContactDetailsViewModel(WebSession webSession) : base(webSession) { }
public ContactDetailsViewModel(WebSession webSession, string returnUrl) : base(webSession, returnUrl) { }
#region Contact
/// <summary>
/// The contact being viewed.
/// </summary>
public ContactModel Contact { get; set; }
#endregion
そして、ContactModelクラスからのスニペット(完全ではありません):
#region Company
[Required(AllowEmptyStrings = false)]
[StringLength(128)]
public string Company { get; set; }
#endregion
私の問題は、クライアント側の検証のために、ネストされたモデルタイプであるContactModelから検証属性を取得できる必要があることです。* For()ヘルパーメソッドを使用しないため、ほとんどのビューで手動アプローチを使用します。これが私がすることです:
@Html.TextBox(
_titleField,
Model.Contact.Title,
new Dictionary<string,object>(Html.GetUnobtrusiveValidationAttributes("Company"))
{
{ "class", "CTextBox" },
{ "style", "width:100%;" }
})
これはチャンピオンのように機能し、ビューのモデルが「検証」属性が適用されているモデルである場合にのみ、モデルから期待される検証属性を生成します。 「検証」属性を持つモデルがネストされたモデルオブジェクト内にある場合、これは機能しません。このシナリオの検証属性を取得する方法を理解しようと苦労しています。ビューは複雑で、モデルの複数のビューにそれ以上分解できないため、ネストされたモデルで動作する必要があります。
私は多くのアプローチを試みましたが、汚染されていない答えを得るためにまだそれらに入るつもりはありません。バインディングプレフィックスを使用し、静的な「ModelMetadata」クラスのいくつかを調べてネストされたモデル構造にドリルインしようとしましたが、現時点ではうまくいきません。どんな助けでも大歓迎です。
他に何が必要か教えてください。
ブラッド・ウィルソンのブログ投稿や彼の領域の他の人たちもたくさん読んだことがありますが、今のところ運がありません。