2017-01-11 10 views
-1

IE:モデルとしてIEnumerableを持つこのASP:NET MVC Razor Viewがあります。ASP.NETビューIEnumerableアイテムの有効化

各行が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> 
} 

私の問題は、私は、「名前」プロパティに不正な値を入力するときに他のすべてのテキスト入力が検証エラーを取得していることです。

ソリューション?

ありがとうございます。

+0

'すべての入力'で検証エラーが発生します。チェックボックスフィールドとテキストボックスフィールドにエラーが発生していますか?また、なぜあなたは '@:'をテーブル要素に置いていますか? – Waragi

+0

*すべてのテキストボックスフィールドは、想定されているとおりにエラーを受け取りますが、その1つだけではなく、エラーが発生します。 私の間違いは@を追加しています。 –

+0

[ADO.NET DataTableへのHTMLテーブルの投稿]の可能な複製(0120-385-331) –

答えて

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> 
    } 
} 

一部のビューの場合は、プロパティの[名前]がビューの他のフィールドに存在しないことを確認してください。 '名前'は非常に一般的ですが、名前を変更してよりわかりやすい名前にする必要があります。 'FullName'、 'ProductName'。 ect ....

+0

既に削除されています。いいえ。スニペットは私のメインビューに含まれている部分的なビューです。 ValidationSummaryメソッドを追加しようとします。 –

+0

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

+0

これについて議論するために私とチャットを作成できますか? –

0

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

あなたはCheckBoxFor()メソッドを使用し、さらにその後、

@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" }) 
} 

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

(詳細はthis answerを参照してください)あなたの要素を生成するためにforループまたはカスタムEditorTemplateを使用する必要がありますチェックボックスを生成する(selectedFooはtypeof boolとする)

@Html.CheckBoxFor(m => m[i].selectedFoo) 
@Html.LabelFor(m => m[i].selectedFoo, Model[i].FooName) 
関連する問題