我的应用程序有两个屏幕。在第一种情况下,用户选择使用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方法的。
发布于 2017-02-10 15:21:49
尝试用这种方式传递参数
return RedirectToAction("Create", "ProductDetails",
new { StatusId = StatusId , ProductId = ProductId });在下一个操作中,接收以下值
public ActionResult Create(int StatusId, int ProductId)编辑::另一种方式(没有查询字符串):
在您的create操作中,在从TempData获取数据之前执行此操作
[HttpGet]
public ActionResult Create()
{
int ProductId, StatusId;
TempData.Keep("ProductId"); // These two lines will keep data
TempData.Keep("StatusId"); // upon multiple refreshes
int.TryParse(TempData["ProductId"].ToString(), out ProductId);
int.TryParse(TempData["StatusId"].ToString(), out StatusId);
model.ProductId = ProductId;
model.StatusId= StatusId;
return View("OrderCreate", model);
}https://stackoverflow.com/questions/42161584
复制相似问题