我在我的应用程序中有两个屏幕。在第一种情况下,用户使用TempData
对象选择两个传入下一个控制器的值(我们无法使用Session
对象)。如何在页面刷新中获取控制器模型
然后在我的第二页的控制器中,它读取这些值并将它们分配给一个新模型。除非用户刷新页面,否则这完全可以正常工作。在这种情况下,TempData
变量将丢失,并且我的模型不再包含这些值。
第一控制器的动作(当你从选择列表中选择第二项)
[HttpPost]
public ActionResult Select(ProductSelector model)
{
if (!ModelState.IsValid)
{
ProductSelector newModel = InitialiseProductSelectorModel();
newModel.ProductId = model.ProductId;
newModel.StatusId = model.StatusId;
return View("ProductSelector", newModel);
}
TempData["StatusId"] = model.StatusId;
TempData["ProductId"] = model.ProductId;
return RedirectToAction("Create", "ProductDetails");
}
我的第二个控制器的动作看起来是这样的:
[HttpGet]
public ActionResult Create()
{
int ProductId, StatusId;
// Get ProductId and StatusId from product selector screen
int.TryParse(TempData["ProductId"].ToString(), out ProductId);
int.TryParse(TempData["StatusId"].ToString(), out StatusId);
model.ProductId = ProductId;
model.StatusId= StatusId;
return View("OrderCreate", model);
}
我怎样才能解决这个问题?我有另一个将模型作为参数的操作,但这是针对POST
方法的。
恐怕您完全不了解MVC模式如何工作以及信息如何传递。首先,阅读更多关于模型绑定的内容。然后看看TempData(http://stackoverflow.com/questions/2642062/asp-net-mvc-does-browser-refresh-make-tempdata-useless) –
您能否详细说明一下?我可以看到将数据从一个控制器传递到另一个控制器的唯一方法是使用会话或tempdata,或将它传递给查询字符串。如果它全部在同一个控制器中,那么我将使用'return View()' – mikeyq6
不,您使用模型绑定传递数据。这是传递信息的MVC方式,只是搜索它。 –