我有一个带有索引操作的普通控制器。
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而不是模型时,这也是一种正确的方法吗?
答案 0 :(得分:0)
我需要睡觉。这会改变模型并修复问题
var ViewModel = new Lot();
return RedirectToAction("Index");