ビューにデータを送信するためにViewBag / ViewDataを使用しないようにしてください。検証の必要に応じて、厳密に型指定されたビューとビューモデルをデータ注釈とともに使用します。
public class CreateIssueVM
{
[Required]
public string Name { set;get;}
public List<SelectListItem> Priorities { get; set; }
[Required]
public int SelectedPriority { set;get;}
}
Name
ここでは、およびSelectedPriority
プロパティを属性で装飾しましたRequired
。つまり、ユーザーはこれらを入力する必要があります。そうしないと、フォーム送信の検証メッセージが表示されます。
GET
アクションで、コレクション プロパティの値を設定し、それをビューに送信します。
public ActionResult Create()
{
var vm=new CreateIssueVM();
vm.Priorities =GetPriorities();
return View(vm);
}
メソッドが優先度GetPriorities
のコレクションを返すと仮定します。SelectListItem
public List<SelectListItem> GetPriorities()
{
List<SelectListItem> prioList=new List<SelectListItem>();
prioList.Add(new SelectListItem { Text = "High", Value = "1" });
prioList.Add(new SelectListItem { Text = "Low", Value = "2" });
// to do :read from db and add to list instead of hardcoding
return prioList;
}
今、私たちの見解では、強く型付けされていますCreateIssueVM
@model CreateIssueVM
@using(Html.BeginForm())
{
@Html.DropDownListFor(x=>x.SelectedPriority,
new SelectList(Model.Priorities ,"Value","Text"),"select")
@Html.ValidationMessageFor(x=>x.SelectedPriority)
<input type="submit" />
}
フォームを送信すると、プロパティを確認することで、フォームが有効かどうかを確認できModelState.IsValid
ます。
[HttpPost]
public ActionResult Create(CreateIssueVM model)
{
if(ModelState.IsValid)
{
// save and redirect
}
vm.Priorities =GetPriorities();
return View(vm);
}
クライアント側の検証も実装する場合は、関連する jquery 控えめな検証スクリプトをビューに含めて、web.config でクライアント側の検証を有効にするだけです。