0

ビューでは、以下のmvcコードを検証できません

       @Html.DropDownList("PriorityId", (IEnumerable<SelectListItem>)@ViewBag.Priority, "--Please Select One--", new { @id = "ddlPriority", @class = "dropdown" })

コントローラーで私が持っている

       private void PriorityDropdownList()
       {
           IEnumerable<SelectListItem> priorityDropdownlist =_PriorityObj.PriorityDropdownlistGet();
           if (priorityDropdownlist != null)
           {
               ViewBag.Priority = priorityDropdownlist;
           }
       }
4

1 に答える 1

0

ビューにデータを送信するために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 でクライアント側の検証を有効にするだけです。

于 2013-04-11T14:37:34.503 に答える