我正在使用MVC 5几个月阅读了很多文章,论坛和文档,但总是想知道视图中哪个更好;
1)使用这里的模型静态方法绑定数据
2)使用在Controller中设置的ViewData [index]绑定相同的数据,前面的示例将如下所示
@Html.DropDownListFor(n => n.MyColorId, ViewData[index])
Run Code Online (Sandbox Code Playgroud)
您希望使用选项1,主要是因为您希望尽可能使用强类型,并在编译时修复错误.
相比之下,ViewData和ViewBag是动态的,并且编译在运行时才能捕获错误.
以下是我在许多应用程序中使用的示例代码 -
public class SampleModel
{
public string SelectedColorId { get; set; }
public IList<SelectListItem> AvailableColors { get; set; }
public SampleModel()
{
AvailableColors = new List<SelectListItem>();
}
}
Run Code Online (Sandbox Code Playgroud)
@model DemoMvc.Models.SampleModel
@using (Html.BeginForm("Index", "Home"))
{
@Html.DropDownListFor(m => m.SelectedColorId, Model.AvailableColors)
<input type="submit" value="Submit"/>
}
Run Code Online (Sandbox Code Playgroud)
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"}
};
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2224 次 |
| 最近记录: |