今、あなたのメインのViewModelがあなたのGET
アクションで今すぐこの
public class AlertViewModel
{
public int AlertId { get; set; }
public List<ChannelViewModel> UserChannelIds { get; set; }
//Other Properties also her
public AlertViewModel()
{
UserChannelIds=new List<ChannelViewModel>();
}
}
のようになりますチェックボックス項目に
public class ChannelViewModel
{
public string Name { set;get;}
public int Id { set;get;}
public bool IsSelected { set;get;}
}
を表現するために、このようなあなたのビューモデルを持って、あなたが記入しますViewModelの値を取得してビューに送信します。
public ActionResult AddAlert()
{
var vm = new ChannelViewModel();
//The below code is hardcoded for demo. you mat replace with DB data.
vm.UserChannelIds.Add(new ChannelViewModel{ Name = "Test1" , Id=1});
vm.UserChannelIds.Add(new ChannelViewModel{ Name = "Test2", Id=2 });
return View(vm);
}
ここでEditorTemplateを作成しましょう。 Views/YourControllerName
に移動し、クレタ島「EditorTemplate」と呼ばれるフォルダとプロパティ名のと同じ名前でそこに新しいビューを作成します(ChannelViewModel.cshtml
)
あなたの新しいエディタテンプレートROこのコードを追加します。自分のメインビューで今すぐ
@model ChannelViewModel
<p>
<b>@Model.Name</b> :
@Html.CheckBoxFor(x => x.IsSelected) <br />
@Html.HiddenFor(x=>x.Id)
</p>
、EditorFor
Htmlのヘルパーメソッドを使用して、エディタのテンプレートを呼び出します。フォームを投稿する際
@model AlertViewModel
<h2>AddTag</h2>
@using (Html.BeginForm())
{
<div>
@Html.LabelFor(m => m.AlertId)
@Html.TextBoxFor(m => m.AlertId)
</div>
<div>
@Html.EditorFor(m=>m.UserChannelIds)
</div>
<input type="submit" value="Submit" />
}
は今、あなたのモデルは、選択したチェックボックスがIsSelected
プロパティのTrue
値を持つことになるUserChannelIds
コレクションを持っています。マイビューモデルの
[HttpPost]
public ActionResult AddAlert(AlertViewModel model)
{
if(ModelState.IsValid)
{
//Check for model.UserChannelIds collection and Each items
// IsSelected property value.
//Save and Redirect(PRG pattern)
}
return View(model);
}
投稿いただきありがとうございます。私はまだ少し混乱しています。いくつかのチェックボックスをビューモデルにマッピングするために3つのクラスと3つのエディタテンプレートを追加するのは過度のようです。これは最も簡単な方法ですか? –
3つのクラスと3つのエディタテンプレートはどこですか?私は2つのクラスと1つのエディタテンプレートを参照してください – Shyju
私は3つのリストのプロパティを持っているので、あなたのソリューションを使用するには3つのクラスと3つの編集テンプレートが必要と思った。それは間違っていますか? –