我创建了具有注册页面的ASP.NET MVC 4 Web应用程序。它包含两个下拉项目。
我想知道在哪里放置代码来填充下拉项目是可行的。现在它在注册控制器中但是因为服务器端验证我在每种方法中编写了两次相同的代码。
注册索引
public ActionResult Index()
{
var model = new RegisterModel
{
TitleList = new SelectList(DataAccess.DAL.DropDownValues("Title"), "Value", "Text"),
BankList = new SelectList(DataAccess.DAL.DropDownValues("Bank"), "Value", "Text")
};
return View("Register", model);
}
注册发布行动
[HttpPost]
[ActionName("doRegister")]
public ActionResult doRegister([Bind(Exclude = "TitleList")] RegisterModel registerModel)
{
var model = (RegisterModel)null;
if (ModelState.IsValid)
{
if (DataAccess.DAL.registerCustomer(registerModel))
{
return RedirectToAction("Index", "Login");
}
}
else
{
model = new RegisterModel
{
TitleList = new SelectList(DataAccess.DAL.DropDownValues("Title"), "Value", "Text"),
BankList = new SelectList(DataAccess.DAL.DropDownValues("Bank"), "Value", "Text")
};
}
return View("Register", model);
}
如果我没有使用下拉值初始化模型对象,则会在我的视图中抛出错误
@Html.DropDownListFor(m => m.Title, new SelectList(Model.TitleList, "Value", "Text"),
"Select Title", new { @class = "form-control" })
我想知道我可以在哪里下载我的下拉代码?
答案 0 :(得分:1)
您可以在控制器中创建功能并从两个位置调用它。我没有看到任何错误。此外,您正在创建SelectList的实例,我认为这对控制器的责任是可以接受的。
public RegisterModel FillModel()
{
return new RegisterModel
{
TitleList = new SelectList(DataAccess.DAL.DropDownValues("Title"), "Value", "Text"),
BankList = new SelectList(DataAccess.DAL.DropDownValues("Bank"), "Value", "Text")
};
}
答案 1 :(得分:1)
为什么不使用:
@Html.DropDownListFor(m => m.Title, Model.TitleList,
"Select Title", new { @class = "form-control" })
因为Model.TitleList的定义是SelectList
您可以使用DropdownList code
条款包围if
,并检查模型是null
还是否,然后您将继续。
最好将代码放在控制器中,而不是放在View中。视图必须仅在用户界面中显示模型的显示。对于控制器来说,它实际上是MVC的核心,MVC是将模型和视图联系在一起的中介,即它需要用户输入,操纵模型和模型。导致视图更新