MVC3 DropDownListFor – 一个简单的例子?

我在我的MVC3应用程序中遇到了DropDownListFor问题。 我能够使用StackOverflow来弄清楚如何让它们出现在视图上,但现在我不知道如何在视图模型提交时在视图模型的相应属性中捕获这些值。 为了得到这个工作,我不得不创build一个具有ID和值属性的内部类,然后我不得不使用IEnumerable<Contrib>来满足DropDownListFor参数的要求。 但是现在,MVC FW应该如何将在此下拉列表中select的值映射回我的视图模型的简单string属性?

 public class MyViewModelClass { public class Contrib { public int ContribId { get; set; } public string Value { get; set; } } public IEnumerable<Contrib> ContribTypeOptions = new List<Contrib> { new Contrib {ContribId = 0, Value = "Payroll Deduction"}, new Contrib {ContribId = 1, Value = "Bill Me"} }; [DisplayName("Contribution Type")] public string ContribType { get; set; } } 

在我看来,我把下拉这样的页面上:

 <div class="editor-label"> @Html.LabelFor(m => m.ContribType) </div> <div class="editor-field"> @Html.DropDownListFor(m => m.ContribTypeOptions.First().ContribId, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")) </div> 

当我提交表单时, ContribType (当然)是空的。

什么是正确的方法来做到这一点?

你应该这样做:

 @Html.DropDownListFor(m => m.ContribType, new SelectList(Model.ContribTypeOptions, "ContribId", "Value")) 

哪里:

 m => m.ContribType 

是结果值将是一个属性。

我认为这将有助于:在控制器获取列表项目和选定的值

 public ActionResult Edit(int id) { ItemsStore item = itemStoreRepository.FindById(id); ViewBag.CategoryId = new SelectList(categoryRepository.Query().Get(), "Id", "Name",item.CategoryId); // ViewBag to pass values to View and SelectList //(get list of items,valuefield,textfield,selectedValue) return View(item); } 

并在视图中

 @Html.DropDownList("CategoryId",String.Empty) 

对于在DropDownList中绑定dynamic数据,您可以执行以下操作:

在控制器中创buildViewBag,如​​下所示

 ViewBag.ContribTypeOptions = yourFunctionValue(); 

现在使用这个值如下所示:

 @Html.DropDownListFor(m => m.ContribType, new SelectList(@ViewBag.ContribTypeOptions, "ContribId", "Value", Model.ContribTypeOptions.First().ContribId), "Select, please")