我有以下代码:
public ActionResult Index()
{
AdminPreRegUploadModel model = new AdminPreRegUploadModel()
{
SuccessCount = successAddedCount,
FailureCount = failedAddedCount,
AddedFailure = addedFailure,
AddedSuccess = addedSuccess
};
return RedirectToAction("PreRegExceUpload", new { model = model });
}
public ActionResult PreRegExceUpload(AdminPreRegUploadModel model)
{
return View(model);
}
但是当我在PreRegExcelUpload上断点时,模型为空。为什么呢?
答案 0 :(得分:1)
我建议使用Session
而不是在Evgeny Levin的回答中使用TempData
对象。关于TempData
,请参阅http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications。
您也可以通过在return PreRegExceUpload(model);
函数中调用return RedirectToAction(..)
而不是Index
来解决此问题。
答案 1 :(得分:1)
TempData只是Session的“智能”包装器,它在幕后仍然以相同的方式运行。
因为它只有4个字段,所以我会通过querystring传递它们。
总是尽量避免使用session / tempdata,在这种情况下肯定是这样。
你确定这是你的完整代码吗?因为它没有意义。
如果您对某些数据进行POST并将其保存到数据库(例如),通常会重定向到另一个传递唯一标识符的操作(通常在保存后生成),从数据库中取回并返回图。
这是更好的做法。
如果你更多地解释你的情景,并显示你使用的正确代码,我可以进一步帮助。
答案 2 :(得分:0)
使用session将模型传递给方法:
public ActionResult Index()
{
AdminPreRegUploadModel model = new AdminPreRegUploadModel()
{
SuccessCount = successAddedCount,
FailureCount = failedAddedCount,
AddedFailure = addedFailure,
AddedSuccess = addedSuccess
};
Session["someKey"] = model;
return RedirectToAction("PreRegExceUpload");
}
public ActionResult PreRegExceUpload()
{
var model = (AdminPreRegUploadModel) Session["someKey"];
Session["someKey"] = null;
return View(model);
}
方法RedirectToAction()不能将非基本类型作为参数,因为url参数是字符串。