尽量避免像 ViewBag 和 ViewData 这样的动态变量。随着代码的增长,它将使您的代码在将来难以阅读并且难以维护。ViewBag 就像魔术字符串!
切换到ViewModel方法。
例如,如果您正在创建一个视图来创建一本书,请为这样的创建一个Viewmodel
(它只是一个普通的类)
public class BookViewModel
{
public int BookId { set;get;}
public string BookName {set;get;}
public IEnumerable<SelectListItem> Attributes{ get; set; }
public int SelectedAttribute{ get; set; }
}
现在在您的GET
操作中,只需创建此类的一个对象,将属性设置BookAttribbutes
为您的下拉项目并将此 ViewModel 对象传递给视图
public ActionResult Create()
{
BookViewModel vm=new BookViewModel();
//The below code is hardcoded for demo. you mat replace with DB data.
vm.Attributes=new[]
{
new SelectListItem { Value = "1", Text = "F Cookie" },
new SelectListItem { Value = "2", Text = "Title" },
}
return View(vm);
}
现在我们将把我们的视图强类型化到这个 ViewModel 类
@model BookViewModel
@using(Html.BeginForm())
{
@Html.TextBoxFor(x=>x.BookName)
@Html.DropDownListFor(x => x.SelectedAttribute,
new SelectList(Model.Attributes, "Value", "Text"), "Select Attribute")
<input type="submit" value="Save" />
}
现在,您将通过访问 ViewModel 的相应属性在 HttpPost 操作中获取 Selected Dropdown 值和文本框值
[HttpPost]
public ActionResult Create(BookViewModel model)
{
if(ModelState.IsValid)
{
//check for model.BookName / model.SelectedAttribute
}
//validation failed.TO DO : reload dropdown here
return View(model);
}