-1

model として IEnumerable を持つこの ASP:NET MVC Razor View があります。

各行が IEnumerable の項目を表すテーブルを作成しています。

私はこのコードを使用しています:

@foreach (var item in Model)
{
    <tr>
        <td>
            <input type="checkbox" name="selectedFoo" value="@item.isAdded"
               @(Html.Raw(item.isAdded? "checked=\"checked\"" : "")) />
            @item.FooName
        </td>

        <td>
            @Html.EditorFor(modelItem=> item.Name, new { htmlAttributes = new { @class = "form-control", style = "width: 70px" } })
            @Html.ValidationMessageFor(modelItem=> item.Name, "", new { @class = "text-danger" })

        </td>

     </tr>
}

私の問題は、「名前」プロパティに間違った値を入力すると、他のすべてのテキスト入力で検証エラーが発生することです。

ソリューション?

ありがとうございました。

4

3 に答える 3

0

テーブル要素から「@:」を削除します。また、かみそりの構文を使用して、フォーム タグを生成します。それが何か関係しているかもしれません。ValidationSummary メソッドも追加します。あなたが投稿したスニペットは完全なビューですか?

@using (Html.BeginForm())
{
@Html.ValidationSummary(true, "", new class{@class="text-danger"})
    @foreach (var item in Model)
    {
        <tr>
           <td>
                <input type="checkbox" name="selectedFoo" value="@item.isAdded"
                   @(Html.Raw(item.isAdded? "checked=\"checked\"" : "")) />
                @item.FooName
            </td>

            <td>
                @Html.EditorFor(modelItem=> item.Name, new { htmlAttributes = new { @class = "form-control", style = "width: 70px" } })
                @Html.ValidationMessageFor(modelItem=> item.Name, "", new { @class = "text-danger" })

            </td>
         </tr>
    }
}

部分ビューの場合は、ビューの他のフィールドにプロパティ 'Name' が存在しないことを確認してください。「名前」は非常に一般的です。おそらく、よりわかりやすい名前に変更する必要があります。「フルネーム」、「製品名」。など....

于 2017-01-11T20:23:34.837 に答える
0

あなたのforeachループはname、テキストボックスごとに重複した属性を生成ValidationMessageFor()しており、その名前を持つすべての要素に適用されます。さらに、フォームを送信するときにモデルにバインドすることはできません。

要素を生成するには、forループまたはカスタムを使用する必要があります (詳細については、この回答を参照してください)。EditorTemplate

あなたのモデルが であると仮定するとIList<T>

@for(int i = 0; i < Model.Count; i++)
{
    @Html.EditorFor(m => m[i].Name, new { htmlAttributes = new { @class = "form-control", style = "width: 70px" } })
    @Html.ValidationMessageFor(m => m[i].Name, "", new { @class = "text-danger" })
}

さらに、CheckBoxFor()メソッドを使用してチェックボックスを生成します ( selectedFootypeofと仮定bool)

@Html.CheckBoxFor(m => m[i].selectedFoo)
@Html.LabelFor(m => m[i].selectedFoo, Model[i].FooName)
于 2017-01-11T21:09:03.100 に答える