2016-10-25 2 views
0

I MVCで、次があります。インパクトのがモデルリスト内のチェックボックスの値を設定する(MVC)

エリア:

@for (int i = 0; i < Model.ImpactAreas.Count; i++) 
    { 
     @Html.HiddenFor(m => m.ImpactAreas[i].ImpactAreaID) 
     @Html.HiddenFor(m => m.ImpactAreas[i].Name) 
     @Html.HiddenFor(m => m.ImpactAreas[i].Description) 
     @Html.HiddenFor(m => m.ImpactAreas[i].IsActive) 
     @Html.HiddenFor(m => m.ImpactAreas[i].ConcurrencyDateTime) 
     @Html.HiddenFor(m => m.ImpactAreas[i].InsertedDateTime) 
     @Html.HiddenFor(m => m.ImpactAreas[i].Checked) 
    } 

    @foreach (var area in Model.ImpactAreas) 
    { 
     CurrentImpactArea = area.Name; 
     string myImpactAreaName = "ImpactArea" + CurrentImpactArea; 
     <div class="columns large-2 medium-3 small-4"> 
     <input type="checkbox" @area.Checked name="@myImpactAreaName" value="@area.ImpactAreaID" @(area.ImpactAreaID == Model.ImpactAreaID ? " checked='checked'" : "") /><label title="@area.Description" for="ImpactAreaID">@area.Name</label> 
     </div> 
    } 
</div> 

私は値を設定する]チェックボックスを取得しようとしていますインパクトエリアオブジェクトのチェックボックスステータス(真/偽)をチェックしたリストアイテムでは、

public bool Checked { get; set; } 

ただし、私の主な目的は、上記のオブジェクトのリスト

何か助けてください?

+0

にする必要がありますが、私たちには、ビューに渡しているモデルを与えることができますか? – Emil

+0

ブラウザで生成されたHTMLをチェックしましたか?また、ブール式をchecked属性に代入するだけで、ひげそりが正しく処理されます。 – juunas

+0

こんにちは、はい、最初は1対1の関係だったので、ラジオボタンを使用して、選択した項目の値IDをモデルに保存しました。しかし、今や1対多の関係に変わった。 Stephen Muecke、あなたの解決策は私が正しい方向に向かうのを助けました。答えとして投稿してください。そうすれば正しいものとしてマークすることができます。まだMVCには新しく、htmlパーツに問題はありません。ちょうどまだ剃刀を見つけていません。 –

答えて

0

すると最初forループが正しくお使いのモデルのためのフォームコントロールを生成しているが、あなたはプロパティの初期値をレンダリングするCheckedプロパティの入力を隠して、そしてそのその値がどのこの

<input type="checkbox" name="@Model.name" id="@Model.name" @(Model.Checked ? "checked" : "") /> 
1

を試してみてください

2番目のforeachループは、モデルとの関係がなく、モデルにバインドされないフォームコントロールを生成しています(参考文献を参照してください)。 this answer f foreachループを使用する理由についての詳細は

さらに、すべての隠れた入力をレンダリングし、それらをすべて元に戻すことでパフォーマンスが低下します。 ImpactAreaIDCheckedの2つのプロパティを含むビューモデルを使用し、フォームを送信するときはIDプロパティに基づいてレコードをデータベースから取得し、ビューモデルに基づいてレコードCheckedを更新して保存します(What is ViewModel in MVC?参照)。

あなたのビューコードは、ちょうど

@for (int i = 0; i < Model.ImpactAreas.Count; i++) 
{ 
    @Html.HiddenFor(m => m.ImpactAreas[i].ImpactAreaID) 
    @Html.CheckBoxFor(m => m.ImpactAreas[i].Checked) 
    // assumes you want the Name value to be used as the label for the checkbox 
    @Html.LabelFor(m => m.ImpactAreas[i].Checked, Model.ImpactAreas[i].Name) 
} 
+0

あなたはいつも答えを提供し、それらを説明するのに最高です@Stephen Muecke – Rajput

関連する問題