对不起,更深奥的问题,但我想知道如何处理我在控制器操作中遇到的一种问题。
通常,我会这样做:
public ActionResult Page1 (MyViewModel model)
{
...
return View(model);
}
或者,如果我正在序列化,我可能会在控制器的早期执行此操作:
private MyViewModel myData ;
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var serialized = Request.Form["myData"];
if (serialized != null)
{
myData = (MyViewModel)new MvcSerializer()
.Deserialize(serialized, SerializationMode.Signed);
TryUpdateModel(myData);
}
else
myData = (MyViewModel)TempData["myData"]
?? new MyViewModel();
TempData.Keep();
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
TempData["myData"] = myData;
}
然后在我的 ActionResult 我可以这样做:
public ActionResult Page2 (string this, string that)
{
...
return View(myData);
}
但是现在我正在尝试(在任何一种情况下)插入一些以某种方式重新启动 ViewModel 的代码。例如,如果我在另一个控制器中有这个,我现在无法让它在上述两种情况下工作:
...
var model = new MyViewModel
{
MyRequests = myRequests //defined earlier in ActionResult
//(e.g., part of a radio button list)
};
如果我将上述内容保留在我的 ActionResult 中,它将无法工作(model
并且会model
发生冲突)。即使我重命名它也是如此myData
。
如果我尝试改为return new MyViewModel
,则会收到转换错误(无法将 ViewModel 转换为 ActionResult)。
如果我将var
其他名称命名为model
or myData
,控制器将触发,但当我进入视图时,.cshtml
我会在该单选按钮上收到对象引用错误。
我是 MVC 的新手。我可以在这两种情况下使用单独的视图模型吗(实际上,我认为使用 Serialize 我会在视图上得到另一个错误)?或者是否有其他方法可以在无需重新执行所有代码的情况下完成此任务?
如果这真的很简单,请原谅我——有时你只是陷入了一个问题,以至于看不到你面前的东西。