在同一控制器内的动作结果之间传送的对象(视图模型)变为字符串或空

时间:2017-10-06 12:37:56

标签: c# asp.net-mvc

我正在尝试将视图模型和一些其他数据从一个控制器操作方法传递到同一个控制器中的另一个操作方法。参数 - 参数对需要处理各种视图模型。为此,我将视图模型对象和其他数据存储在对象中。

public class infViewModel
{
   //Fields...
}

public class infElement
{
   public Guid ID { get; set; }
   public object ViewModel { get; set; }
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult actionOne(infViewModel pCurrentViewModel)
{
   infViewModel _CurrentViewModel = new infViewModel();
   _CurrentViewModel = pCurrentViewModel;

   infElement _Element = new infElement();
   _Element.ViewModel = _CurrentViewModel;

   return RedirectToAction(“actionTwo”, _Element);
}

public ActionResult actionTwo(infElement pElement)
{
}

我可以传递不同类型的数据,例如stringGuid,但无法传递包含视图模型的对象。

我观察到参数和参数之间某处的数据丢失: 参数对象QuickWatch的{​​{1}}显示预期的数据,包括_Element对象以及ViewModel的字段和字段的相应内容。

另一方面,参数对象_Element.ViewModel的{​​{1}}表示QuickWatch对象变为普通字符串。该字符串是名称空间,类等的串联。同时,其他数据(如pElement)显示完整。

pElement.ViewModel通用:

pElement.ID

但结果基本相同,但现在infElementpublic class infElement<T> { public Guid ID { get; set; } public T ViewModel { get; set; } }

如何在动作结果中传输视图模型?

1 个答案:

答案 0 :(得分:0)

这是TempData合适的地方:

public ActionResult actionOne(infViewModel pCurrentViewModel)
{
   infViewModel _CurrentViewModel = new infViewModel();
   _CurrentViewModel = pCurrentViewModel;

   infElement _Element = new infElement();
   _Element.ViewModel = _CurrentViewModel;

   TempData["_Element"] = _Element;

   return RedirectToAction("actionTwo");
}

public ActionResult actionTwo()
{
    var _Element = TempData["_Element"] as infElement;
    // ...
}