是否可以在一个ActionResult中使用两个ViewModel?

时间:2013-01-10 13:11:34

标签: asp.net-mvc asp.net-mvc-3

对不起更深奥的问题,但我想知道如何处理控制器操作中的一些问题。

通常,我会这样做:

public ActionResult Page1 (MyViewModel model)
{
...
return View(model);
}

或者,如果我正在进行序列化,我可能会在Controller中尽早这样做:

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中保留上述内容,则无效(modelmodel冲突)。即使我重命名它myData也是如此。

如果我改为return new MyViewModel,我会收到转换错误(无法将ViewModel转换为ActionResult)。

如果我将var命名为modelmyData以外的其他内容,则控制器将触发,但当我到达视图.cshtml时,我将收到对象引用错误在那个单选按钮上。

我是MVC的新手。我可以在这两种情况下使用单独的视图模型(实际上,我认为使用Serialize我会在视图上出现另一个错误)?或者是否有其他方法可以实现这一目标,而无需重新执行所有代码?

如果这是非常简单的原谅我 - 有时你只是陷入了一个问题,你就不会在你面前看到一些东西。

0 个答案:

没有答案