1

ドロップダウンボックスを動的に生成しています。ドロップダウン ボックスで選択した値を、モデルのフィールドの 1 つとしてコントローラーに送信しようとしています。

@using (Html.BeginForm("AddItem", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        <label>
            Category:</label>
        @Html.DropDownList("Category", (IEnumerable<SelectListItem>)ViewData["CategoryList"])<br />
        <label>
            Sku:</label>
        @Html.TextBox("newItem.Sku")<br />
        <label>
            Title:</label>
        @Html.TextBox("newItem.Title")<br />

カテゴリ(ドロップダウンボックスの値)の値を除いて、すべての値をモデルの一部として送信できるため、コントローラーの関数が失敗します..

回答:ドロップダウンリストの "Category" の名前を = "newItem.Category" に変更すると、基本的にモデル名と一致するはずです。

4

3 に答える 3

3

ViewModelすべてのカテゴリと SelectedCategoryId 値を保持するためのプロパティを持つアイテムの を作成します

public class ItemViewModel
{
  public int ItemId { set;get;}
  public string SKU { set;get;}
  public string SelectedCategoryId { get; set; }
  public IEnumerable<SelectListItem> Categories{ get; set; }
}

ホーム コントローラーで、ItemViewModel のオブジェクトを作成する Add のアクション メソッドを作成し、カテゴリを設定して、厳密に型指定されたビューに戻ります。

public ActionResult AddItem()
{
  ItemViewModel objNewItem=new ItemViewModel();
  objNewItem.Items = new[]
  {
     new SelectListItem { Value = "1", Text = "Perfume" },
     new SelectListItem { Value = "3", Text = "Shoe" },
     new SelectListItem { Value = "3", Text = "Shirt" }
  };
  return View(objNewItem);  

}

強く型付けされたビュー

@model ItemViewModel
 @using (Html.BeginForm("AddItem", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
 {
   Category:
   @Html.DropDownListFor(x => x.SelectedCategoryId ,new SelectList(Model.Categories,"Value",Text"), "Select..")
   <input type="submit" value="Add" />
 }

そして、ホームコントローラーに HTTPPOST AddItem メソッドを用意します

[HttpPost]
public ActionResult AddItem(ItemViewModel objItem)
{
  //Now you can access objItem.SelectedCategoryId and do what you like to do...

}
于 2012-04-24T16:48:56.830 に答える
2

DropDownは。というフィールドにバインドされていますCategory。したがって、ビューモデルにそのようなフィールドが必要です。

public class MyViewModel
{
    public string Category { get; set; }
    ...
}

そしてあなたの行動:

[HttpPost]
public ActionResult AddItem(MyViewModel model)
{
    // model.Category will contain the selected value
    ...
}

また、このプロパティは、複雑なオブジェクトではなく、単純なスカラー値(string、int、...)である必要があることに注意してください。

そして、適応されたビューモデルができたら、強く型付けされたバージョンのヘルパーを使用できます。

@model MyViewModel
@using (Html.BeginForm("AddItem", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.LabelFor(x => x.Category)
    @Html.DropDownListFor(x => x.Category, Model.Categories)
    <br />
    @Html.EditorFor(x => x.Sku)
    <br/>
    @Html.EditorFor(x => x.Title)
    ...
}
于 2012-04-24T16:33:29.270 に答える
0

ドロップダウンリストの名前を「Category」から「newItem.Category」に変更すると、作業が完了しました。基本的に、モデルがコントローラー(この場合は「newItem」)で受信されると予想される場合、ダウンコントロール名はモデル名とそのプロパティと一致する必要があります。 。

于 2012-09-06T21:25:22.737 に答える