3

フォームにいくつかのチェックボックスを表示する必要があります。ユーザーは必要な数だけチェックできます。

そこで、チェックボックスオプションをデータベースに保存します。(必要)

モデル

public class Options
{
    public int OptionsId {get; set;}
    public string Option {get; set;}
}

viewModelで、

IEnumerable<Options> listCheckBoxOptions {get; set;}// store list of options from database
Dictionary<string,bool> checkboxs {get; set;} // store if is check or not

したがって、ビューでは、チェックボックスの値(true / false)をこのチェックボックスディクショナリに保存します。

@foreach (var x in Model.listCheckBoxOptions)
     {                  
           @Html.CheckBoxFor(m => m.checkboxs[x.Option])
           @m.Option <br />                             
     } 

したがって、フォームを送信すると...コントローラーに到達したときのチェックボックスはnullになります。

なぜですか?

4

2 に答える 2

1

エディター テンプレートを使用する

ViewModel にもう 1 つのプロパティを追加します。読みやすくするために、名前を複数形から単数形に変更します ( OptionsからOption ) 。

public class Option
{
    public int OptionId {get; set;}
    public string Option {get; set;}
    public bool IsSelected { set;get;}
}

そしてあなたのメインViewModel、

public class CustomerViewModel
{
  public IEnumerable<Option> OptionList { set;get;}
  public CustomerViewModel()
  {
     OptionList=new List<Option>();
  }
}

フォルダーOption.cshtmlの下に呼び出されるビューを作成します。Views/YourControllerName

その中にこのコンテンツを入れてください。

@model Option
@{
   Layout = null;
}
<p>
 @Html.CheckBoxFor(x => x.IsSelected)
 @Html.LabelFor(x => x.IsSelected, Model.Option)
 @Html.HiddenFor(x => x.OptionId)
</p>

メインフォームでは、このように呼び出します

@model YourViewModel
@using(Html.BeginForm())
{     
   @Html.EditorFor(m=>m.OptionList)
  <input type="submit" value="Save" />
}

アクションで、プロパティ内のアイテムのプロパティ値を確認POSTできますIsSelectedOptionList

[HttpPost]
public ActionResult Edit(CustomerViewModel model)
{
   foreach(var opt in model.OptionList)
   {
      //check for model.IsSelected value for each item
   }
}
于 2012-08-09T04:00:24.453 に答える
1

チェックボックスにはこのような名前が付けられcheckboxs[key here]、ID はこのようなものになりますcheckboxs_key_here_。MVC はこれらをバインドする方法を知りません。

数日前に回答したこのスレッドをご覧ください:ループ ステートメントで MVC3 RadioButton リストを生成する

CheckBox の代わりに RadioButton を使用するだけで、同じことです。

于 2012-08-09T03:42:57.423 に答える