1

次の電話があります。

    @Html.TextBoxFor(m => m.SelectedName)
    @Html.TextBoxFor(m => m.Selections[0].Name)

SelectedNameどちらの場合も、と にNameそれぞれ次の注釈を付けてタグ付けします。

    [Required(ErrorMessage = "Please provide required value")]

ただし、SelectedName は目立たない適切な html 属性を出力します。

<input id="SelectedName" name="SelectedName" data-val="true" data-val-required="Please provide required value">

m.Selections[0].Name は次のように表示されます。

<input id="Selections_0__Name" name="Selections[0].Name" value="" type="text">

何を与える?このシナリオが MVC4 で見落とされているとは信じられません。かなり一般的な使用例のようです。配列である、または配列を含むビュー モデルを検証するにはどうすればよいですか?

=====================わかりやすくするためにViewModelのコードを追加して編集====================

public class ContainerVM
{
    [Required]
    public string SelectedName {get;set;}
    public MemberVM[] Selections {get;set;}
}

public class MemberVM
{
    [Required]
    public string Name { get;set; }
}

=====================フォーム ====================

@using MyProject.Models;
@model ContainerVM
@{
    ViewContext.FormContext = new FormContext(); //This is just a hack because the parent isn't defined yet.
}

        @Html.TextBoxFor(m => m.SelectedCptGroupId)
        @Html.TextBoxFor(m => m.CptGroupSelections[0].Name)
4

1 に答える 1

2

フィードバックを得る前に回答をプッシュすることを躊躇しますが、

[required]注釈は、配列または複雑なオブジェクトには適用できません。

[required]クラスの特定の要素またはネストされたクラスのメンバーにさえ、注釈を適用できます。

明らかに、古典に注釈を付けることができることは誰もが知っています

[required]
public string SelectedName {get; set;}

これはうまくいくはずです。この問題について話すことはできません。

しかし、逆に文字列の配列に対するアノテーション

[required]
public string[] SelectedName {get;set;}

失敗するでしょう。これを成功させるには、モデルの各要素に注釈を付ける必要があります。

同様に、ネストされたモデルにメンバーで注釈を付けようとした場合 [必須] public SelectionsModel Selections {get;set;}

これも失敗します。

最悪の場合、モデルの配列に注釈を付けようとしているようです [必須] public SelectionsModel Selections[] {get;set;}

これもまた失敗します。


何が機能するはずですか(私は試していませんが):

ネストされたモデル選択の各要素に注釈を付けます。

次に、配列の各モデルの各要素に入力が必要です。

    public class SelectionsModel 
    {
        [required]
        public string name {get; set;}
        [required]
        public int age { get; set; }

    }
于 2013-02-26T00:20:09.340 に答える