我正在学习MVC,我正在尝试了解如何在控制器级别访问ViewModel。
我的问题是如何在MethodTwo中访问ViewModel?
例如:
视图模型
public class MyViewModel
{
public int MyID { get; set; }
public string MyString { get; set; }
public bool MyBool { get; set; }
}
在控制器中我有这个:
public ActionResult MethodOne(int myId, string myString, bool myBool)
{
MyViewModel mvm = new MyViewModel { MyID = myId, MyString = myString,yBool = myBool };
return View("MyPrint", mvm);
}
在我的MyPrint页面上,我正在进行Ajax GET(到同一个控制器),我想访问相同的ViewModel。
public string MethodTwo()
{
// How can I access the ViewModel here???
//var myString = DoStuff(MyViewModel);
return myString;
}
答案 0 :(得分:2)
目前尚不清楚您要实现的目标,但通常情况下,如果您想要访问方法中的某些内容,则必须将其作为参数传递:
public string MethodTwo(MyViewModel model)
这将允许您通过以下其他操作调用它:
public ActionResult MethodOne(int myId, string myString, bool myBool)
{
MyViewModel mvm = new MyViewModel { MyID = myId, MyString = myString,yBool = myBool };
var result = MethodTwo(mvm);
return View("MyPrint", mvm);
}
但是,如果您正在谈论实际调用另一种操作方法,那就有点不同了。如果您需要加载其他操作,则需要将用户重定向到该新操作。这也意味着您必须传递所需的任何数据以及该重定向,并且由于重定向将导致发出GET请求,因此您需要使用的只是您重定向到的URL的查询字符串。尝试在查询字符串中传递整个类实例是不可取的。您必须将其展平为键值对,或者您必须将JSON编码为可以传递的字符串,这意味着您必须将JSON解码为另一个。
由于您实际上是在第一个动作中基于简单类型参数构建视图模型instacne,我建议您将这些相同的类型参数传递给第二个动作并在那里重构它。