需要不同视图的MVC4 EF5 RedirecttoAction

时间:2014-01-01 03:15:15

标签: entity-framework asp.net-mvc-4

我有一个带有索引操作的普通控制器。

public class LotController : Controller
private HouseContext db = new HouseContext();  
public ActionResult Index()   

在我的创建动作中,我使用了一个特殊视图:

public ActionResult Create(int? buidID)
{
    var ViewModel = new Lot_create_VM();  // this view only uses dropdown boxes
    ViewBag.HstyleID = new SelectList(db.Hstyles, "HstyleID", "HName"); //populate one here
    //populate more then
    return View();
}

post动作正常,我引入了viewmodel并将这些值传递给基类并保存更改:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Lot_create_VM lot_create_VM)
{
    if (ModelState.IsValid)
    {  
        Lot lot = new Lot();
        lot.LotName = lot_create_VM.LotName;
    }
    db.Lots.Add(lot);
    db.SaveChanges();

在这里使用其他代码最终我返回到Lot_create_VM视图。

    return View(lot_create_VM);
}

问题是如果创建失败(只是进出 - 没有输入数据)ModelState.IsValid = false,我尝试返回索引:

return RedirectToAction("Index");

期望“Lot”的视图不是Lot_create_VM。产生以下错误:“传递到字典中的模型项的类型为'MVCBSV.ViewModels.Lot_create_VM',但此字典需要类型为'MVCBSV.Models.Lot'的模型项”

我试过了:

return RedirectToAction("Index","Lot");
return View("Index", "Lot")
return RedirectToAction("Index",  db = new HouseContext());

我可以看到有什么问题,但看不出如何更改回早期模型。使用ViewModel而不是模型时,这也是一种正确的方法吗?

1 个答案:

答案 0 :(得分:0)

我需要睡觉。这会改变模型并修复问题

var ViewModel = new Lot(); 
return RedirectToAction("Index");