我与MVC 5一起工作了几个月,阅读了许多文章,论坛和文档,但总是想知道哪种方法更好。
1)结合使用模型的静态方法等数据在这里
2)使用在Controller中设置的ViewData [index]绑定相同的数据,与上一示例类似
@Html.DropDownListFor(n => n.MyColorId, ViewData[index])
您要使用选项1,主要是因为要尽可能使用 Strongly Type ,并在编译时修复错误。
相反, ViewData 和 ViewBag 是动态的,并且在运行时,编译无法捕获错误。
这是我在许多应用程序中使用的示例代码-
public class SampleModel { public string SelectedColorId { get; set; } public IList<SelectListItem> AvailableColors { get; set; } public SampleModel() { AvailableColors = new List<SelectListItem>(); } }
@model DemoMvc.Models.SampleModel @using (Html.BeginForm("Index", "Home")) { @Html.DropDownListFor(m => m.SelectedColorId, Model.AvailableColors) <input type="submit" value="Submit"/> }
public class HomeController : Controller { public ActionResult Index() { var model = new SampleModel { AvailableColors = GetColorListItems() }; return View(model); } [HttpPost] public ActionResult Index(SampleModel model) { if (ModelState.IsValid) { var colorId = model.SelectedColorId; return View("Success"); } // If we got this far, something failed, redisplay form // ** IMPORTANT : Fill AvailableColors again; otherwise, DropDownList will be blank. ** model.AvailableColors = GetColorListItems(); return View(model); } private IList<SelectListItem> GetColorListItems() { // This could be from database. return new List<SelectListItem> { new SelectListItem {Text = "Orange", Value = "1"}, new SelectListItem {Text = "Red", Value = "2"} }; } }