Asp.net mvc 4 ASP.NETMVC,保存动态选择列表的正确方法?
我正在学习MVC4+EF 5.0项目,我使用VS2012默认模板创建空白项目,并将数据库搭建到*.edmx模型,以及一个编辑视图,用于编辑在哪个公司工作的员工 我遇到的一个问题是,当用户输入失败并返回时,在编辑视图(下拉菜单)中维护SelectList DropDownList从控制器绑定ListItem: Edit.cshtmlAsp.net mvc 4 ASP.NETMVC,保存动态选择列表的正确方法?,asp.net-mvc-4,Asp.net Mvc 4,我正在学习MVC4+EF 5.0项目,我使用VS2012默认模板创建空白项目,并将数据库搭建到*.edmx模型,以及一个编辑视图,用于编辑在哪个公司工作的员工 我遇到的一个问题是,当用户输入失败并返回时,在编辑视图(下拉菜单)中维护SelectList DropDownList从控制器绑定ListItem: Edit.cshtml @Html.DropDownListFor(model => model.CompanyID, (SelectList)ViewData["CompanySel
@Html.DropDownListFor(model => model.CompanyID, (SelectList)ViewData["CompanySelectList"])
MemberController.cs
[HttpGet]
public ActionResult Edit(int SelectedCompanyID = 0, int StaffID = 0)
{
IQueryable<company_benefit> companys = from c in db.company where c.ID.Equals(CompanyID) select c ;
ViewData["CompanySelectList"] = new SelectList(companys, "ID", "Name", SelectedCompanyID);
staff s = db.staff.Find(StaffID);
if (s == null)
{
return HttpNotFound();
}
return View(s);
}
[HttpPost]
public ActionResult Edit(staff s)
{
if (ModelState.IsValid)
{
db.Entry(s).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index"); //Edit Success
}
return View(s); //Edit Fail
}
[HttpGet]
公共操作结果编辑(int-SelectedCompanyID=0,int-StaffID=0)
{
IQueryable companys=从db.company中的c开始,其中c.ID.Equals(CompanyID)选择c;
ViewData[“CompanySelectList”]=新的SelectList(公司的“ID”、“名称”、SelectedCompanyID);
staff s=db.staff.Find(StaffID);
如果(s==null)
{
返回HttpNotFound();
}
返回视图;
}
[HttpPost]
公共行动结果编辑(员工)
{
if(ModelState.IsValid)
{
db.Entry.State=EntityState.Modified;
db.SaveChanges();
返回重定向操作(“索引”);//编辑成功
}
返回视图;//编辑失败
}
如果有人提交的表单包含无效数据,导致输入失败,它将返回视图。
但是,SelectList是从ViewData绑定的,因此加载页面时ViewData将消失,这是ViewData的行为,我改为TempData也没有帮助
那么,在发布编辑操作时是否需要再次构建SelectList
我关心的是使用session来存储它,但我不想打破MVC设计模式
我的英语不好,抱歉搞混了。
谢谢你 http post方法中有一个快速解决方案,可用于再次编辑和创建视图数据
[HttpPost]
public ActionResult Edit(staff s)
{
if (ModelState.IsValid)
{
db.Entry(s).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index"); //Edit Success
}
IQueryable<company_benefit> companys = from c in db.company where c.ID.Equals(CompanyID) select c ;
ViewData["CompanySelectList"] = new SelectList(companys, "ID", "Name", SelectedCompanyID);
return View(s); //Edit Fail
}
[HttpPost]
公共行动结果编辑(员工)
{
if(ModelState.IsValid)
{
db.Entry.State=EntityState.Modified;
db.SaveChanges();
返回重定向操作(“索引”);//编辑成功
}
IQueryable companys=从db.company中的c开始,其中c.ID.Equals(CompanyID)选择c;
ViewData[“CompanySelectList”]=新的SelectList(公司的“ID”、“名称”、SelectedCompanyID);
返回视图;//编辑失败
}
您所做的基本上是说,当您从编辑视图返回到服务器时,服务器应该重建视图数据并调用相同的视图,以便它可以填充列表
有一种更好的方法可以创建一个模型,其中既包括当前模型,也包括
list companys=new list()代码>,然后从数据库中再次填充它。同样,使用强类型模型的概念是相同的。谢谢您的回答,但它是否破坏了ASP.NET MVC机制或概念?因为从数据库中重新填充它似乎是重复任务。您可以在视图模型的构造函数中定义列表填充,而不在实际的编辑或编辑后视图中重复它。