您的代码存在一些概念问题:
首先,@Html.DropDownListFor(n => n.OrderTemplates, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
使用DropDownListFor时,第一个参数是提交表单后存储所选值的属性。因此,在您的情况下,您应该拥有SelectedOrderId模型的一部分或类似的东西,以便以这种方式使用它:@Html.DropDownListFor(n => n.SelectedOrderId, new SelectList(Model.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1), "Please select an order template")
第二,
除了使用ViewBag之外,这没有错,但有更好的方法(将信息放在ViewModel中),当您持有SelectList的ViewBag属性时,存在“小错误”(或未预料到的行为)放置所选值的属性的相同名称。要避免这种情况,请在命名包含项目列表的属性时使用其他名称。
如果我是你,我会使用一些代码来避免这个问题并编写更好的MVC代码:
视图模型:public class MyViewModel{
public int SelectedOrderId {get; set;}
public SelectList OrderTemplates {get; set;}
// Other properties you need in your view}
控制器:public ActionResult MyAction(){
var model = new MyViewModel();
model.OrderTemplates = new SelectList(db.OrderTemplates, "OrderTemplateId", "OrderTemplateName", 1);
//Other initialization code
return View(model);}
在您的视图中:@Html.DropDownListFor(n => n.SelectedOrderId, Model.OrderTemplates, "Please select an order template")