Asp.net mvc 如何从视图获取控制器的状态数据?
我是MVC的新手,对在MVC中维护状态有一些疑问: 1:据我所知,控制器可以通过ViewBag、ViewData等向视图提供状态数据。但是如何从视图将该状态数据返回控制器?似乎使用ViewBag等只是一个单向行程,不利于维护状态 2:在MVC中,会话的使用是不受欢迎的还是被视为管理状态的“老办法”?如果是这样的话,在没有像会话这样的“全局”工具的情况下,如何管理状态 我在网上搜索了这些问题的答案,但到目前为止只找到了不完整的答案 另外,如果有必要的话,我正在使用MVC5和EntityFramework6Asp.net mvc 如何从视图获取控制器的状态数据?,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我是MVC的新手,对在MVC中维护状态有一些疑问: 1:据我所知,控制器可以通过ViewBag、ViewData等向视图提供状态数据。但是如何从视图将该状态数据返回控制器?似乎使用ViewBag等只是一个单向行程,不利于维护状态 2:在MVC中,会话的使用是不受欢迎的还是被视为管理状态的“老办法”?如果是这样的话,在没有像会话这样的“全局”工具的情况下,如何管理状态 我在网上搜索了这些问题的答案,但到目前为止只找到了不完整的答案 另外,如果有必要的话,我正在使用MVC5和EntityFramew
ViewBag
确实是单向的。它不用于数据的持久性,坦率地说,应该几乎完全避免使用它。除了极少数例外,任何您认为可能需要查看的ViewBag
都最好使用视图模型(作为以上第2条的警告,值得一提的是,我是从网站或应用程序的角度讲的。如果你说的是API,那是完全不同的蠕虫。API,至少那些遵循REST约定的API,完全不鼓励会话。会话是REST的对立面,REST依赖于无状态na实际上,您使用ViewBag发送的数据可以通过GET和POST参数发送回控制器(所有数据的发送方式) 以下是使用ViewBag(输出)和
(输入)来回传递数据的示例
公共类HomeController:控制器
{
公共视图结果编辑()
{
//让我们发送这个,看看视图是否可以返回它。
ViewBag.UserID=1;
返回视图();
}
[HttpPost]
公共操作结果编辑(int userID)
{
int userID=userID;//在这里放置一个断点并验证我们的小测试。
返回视图();
}
}
//这是你的观点
@使用(Html.BeginForm()){
}
管理国家
使用ViewBag传递状态并不少见,例如管理分页功能的页面索引。在这种情况下,我们不希望仅为与模型没有任何关系的单个属性(PageIndex)创建ViewModel。只要您的意图是显而易见的,我就说
会话的正确使用取决于您尝试维护的状态类型(以及业务需求)。如果您使用会话管理UI的状态,则这是不好的。但是,如果您试图在需要安全性的网站(如银行网站)中保护用户帐户id之类的状态,则强烈建议使用会话(如果不是唯一可接受的话)
会话是一种工具,和大多数工具一样,如果滥用,人们会皱眉
不同类型的状态不应通过一种方法进行管理,而应通过多种不同的方法进行管理
管理状态的方法
public class HomeController : Controller
{
public ViewResult Edit()
{
// Lets send this one, and see if the view can return it.
ViewBag.UserID = 1;
return View();
}
[HttpPost]
public ActionResult Edit(int userID)
{
int userID = userID; // Place a breakpoint here and verify our little test.
return View();
}
}
// This is your view
@using (Html.BeginForm()) {
<input type="hidden" value="@ViewBag.UserID" />
<input type="submit" value="Save" />
}