Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 ASP.NETMVC,保存动态选择列表的正确方法?_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 4 ASP.NETMVC,保存动态选择列表的正确方法?

Asp.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

我正在学习MVC4+EF 5.0项目,我使用VS2012默认模板创建空白项目,并将数据库搭建到*.edmx模型,以及一个编辑视图,用于编辑在哪个公司工作的员工

我遇到的一个问题是,当用户输入失败并返回时,在编辑视图(下拉菜单)中维护SelectList

DropDownList从控制器绑定ListItem:

Edit.cshtml

@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机制或概念?因为从数据库中重新填充它似乎是重复任务。您可以在视图模型的构造函数中定义列表填充,而不在实际的编辑或编辑后视图中重复它。