2012-04-24 43 views
1

我正在动态生成一个下拉框。 我试图将下拉框中的选定值作为模型的字段之一发送给控制器。如何将Html.Dropdownlist的值传递给控制器​​

@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 /> 

我能够所有的值作为发送模型的一部分,除了类别(dropdownbox值)的值,从而使得在控制器失效功能..

答案:重命名Dropdownlist“Category”to =“newItem.Category”,做了工作,基本上它应该与模型名称匹配。

+1

你可以在控制器中发布你的动作代码declration吗?模型联编程序应该绑定到名为“Category”的属性。如果你接受一个模式和它的名字叫“newItem”,把你的下拉列表的名字改为“newItem.Category” – 2012-04-24 16:27:05

+0

是的,正要回答它,但是多谢了,你说得对。再次感谢 ! – Nanu 2012-04-24 16:31:19

+0

请参考这篇由Mike Mike撰写的文章http://www.mikesdotnetting.com/Article/128/Get-The-Drop-On-ASP.NET-MVC-DropDownLists – Yasser 2012-04-25 10:51:23

回答

0

重命名下拉列表 “类别” 为= “newItem.Category” 的HTTPPOST AddItem方法,做该工作,基本上如果你期望在控制器中接收一个模型,在这种情况下是“newItem”,down控件名称应该与模型名称及其属性匹配。

2

您的DropDown绑定到名为Category的字段。所以你必须在你的视图模型上有这样的领域。

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

和你的行动:

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

另外请注意,此属性必须是简单的标值(字符串,整数,...),而不是一个复杂的对象。

一旦你有一个适应视图模型,你可以使用助手的强类型版本:

@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) 
    ... 
} 
3

与性能,以容纳所有类别和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; } 
} 
为您的项目一个 ViewModel

在您的家庭控制器中,创建操作方法添加您创建ItemViewModel的对象,设置类别并返回到强类型的视图。

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] 
public ActionResult AddItem(ItemViewModel objItem) 
{ 
    //Now you can access objItem.SelectedCategoryId and do what you like to do... 

} 
相关问题