如何在控制器上访问 ViewModel
How to access ViewModel on the controller
我正在学习 MVC,我正在尝试了解如何在控制器级别访问 ViewModel。
我的问题是如何在 MethodTwo 中访问 ViewModel?
- 我需要在 AJAX 调用中发回 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;
}
不清楚你想要达到什么目的,但一般来说,如果你想访问方法中的某些东西,你必须将它作为参数传入:
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 的查询字符串。尝试在查询字符串中传递整个 class 实例是不可取的。您要么必须将其展平为键值对,要么必须 JSON 将其编码为可以传递的字符串,这意味着您必须 JSON 在另一个中对其进行解码。
由于您实际上是在第一个操作中基于简单类型参数构建视图模型 instacne,我建议您将这些相同的类型参数传递给第二个操作并在那里重建它。
我正在学习 MVC,我正在尝试了解如何在控制器级别访问 ViewModel。
我的问题是如何在 MethodTwo 中访问 ViewModel?
- 我需要在 AJAX 调用中发回 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;
}
不清楚你想要达到什么目的,但一般来说,如果你想访问方法中的某些东西,你必须将它作为参数传入:
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 的查询字符串。尝试在查询字符串中传递整个 class 实例是不可取的。您要么必须将其展平为键值对,要么必须 JSON 将其编码为可以传递的字符串,这意味着您必须 JSON 在另一个中对其进行解码。
由于您实际上是在第一个操作中基于简单类型参数构建视图模型 instacne,我建议您将这些相同的类型参数传递给第二个操作并在那里重建它。