can anyone please show me the code for posting a list on button click from view to controller in mvc3-asp. i have a list in which one of the list element is check box.at first i have to select some of the values from list then submit it to save the selected values only.
2 に答える
あなたの質問に答えるには、2つの広い範囲があります。したがって、シナリオに応じてカスタマイズする必要がある一般的な例を示します。
あなたの見解は、いくつかのタスクをユーザーに割り当てることであると仮定します。各ユーザーは、1 つ以上のタスクに割り当てることができます。
だから私はこのようなビューモデルを作成します。
public class UserViewModel
{
public int UserId { set;get;}
public string Name { set;get;}
public List<Task> Tasks { set;get;}
public UserViewModel()
{
Tasks=new List<UserTask>();
}
}
public class UserTask
{
public int ID { set;get;}
public string Name { set;get;}
public bool IsSelected { set;get;}
}
アクションで、 UserViewModelGET
のオブジェクトを作成し、Tasks プロパティを (データベースから) 利用可能なタスクのリストに設定します。
public ActionResult Add()
{
var vm=new UserViewModel();
vm.Tasks=GetAvailableTasks();
return View(vm);
}
仮定は、オブジェクトGetAvailableTasks
のリストを返すメソッドです。UserTask
次に、エディター テンプレートを作成します。フォルダーに移動し、~/Views/YourControllerName
というフォルダーを作成しますEditorTemplates
。新しく作成したフォルダーに新しいビューを追加し、名前をTask.cshtml
. それに以下のコードを追加します
@model YourNameSpace.UserTask
<p>
@Html.CheckBoxFor(x => x.IsSelected) Model.Name
@Html.HiddenFor(x => x.ID)
</p>
メイン ビューに戻り、EditorFor
ヘルパー メソッドを使用して EditorTemplate を取得します。
@model YourNamespace.UserViewModel
<h2>Quiz 24</h2>
@using (Html.BeginForm())
{
@Html.EditorFor(x=>x.Tasks)
<input type="submit" />
}
フォームが送信されると、選択したチェックボックスの値を次のように取得できます
[HttpPost]
public ActionResult Save(UserViewModel model)
{
List<int> taskIds=new List<int>();
foreach (var task in model.Tasks)
{
if (task.IsSelected)
{
//you can get the selected task id's here.
taskIds.Add(task.ID);
}
}
//to do : save and redirect (PRG pattern)
}
これは、 EditorTemplatesを使用してフォーム送信時にコレクションを処理する方法を説明するブログ投稿です。投稿は、ラジオボタンを処理する例を示しています。