我正在学习ASP.NET MVC,许多“ASP.NET”的概念,如认证,授权,会话状态仍然适用于它。ASP.NET MVC中ViewState是否相关?
但是,无论我了解多少,我都没有看到ViewState在ASP.NET应用程序中仍然相关。但它在那里(System.Web.Mvc.ViewPage的属性)!它仅出于兼容性原因还是仍然有一定的目的/用途?
我正在学习ASP.NET MVC,许多“ASP.NET”的概念,如认证,授权,会话状态仍然适用于它。ASP.NET MVC中ViewState是否相关?
但是,无论我了解多少,我都没有看到ViewState在ASP.NET应用程序中仍然相关。但它在那里(System.Web.Mvc.ViewPage的属性)!它仅出于兼容性原因还是仍然有一定的目的/用途?
是的,这是正确的。 ViewState不相关。更多关于页面模型和MVC这里之间differencies:
@ Jake1164:适合我。 – josh3736 2012-09-02 22:04:39
我个人认为它已经过时了。我唯一一次在ASP.Net MVC应用程序中看过ViewState的时候,是有人'不小心'在页面上添加了一个ASP.Net控件。
ViewState不相关,但它提供了一些很棒的功能。我们不必每次都重新加载数据,或者担心缓存每个项目等。 ViewState还提供了一些安全性 - 它防止了某种程度的表单篡改。如果你绑定了一个组合框,它会阻止人们摆弄那些与散列视图状态进行比较的值,并且如果它与之混淆,将会失败验证。为此,ViewState相当不错。问题是它在大多数页面上变得非常大,因为人们并没有关闭它们不需要的视图状态。
好的 - 如何解决这个问题? 来自Microsoft的MVC Futures项目包含Html.Serialize方法,并与作为方法参数的[Deserialize]属性一起提供了对'viewstate'(即序列化)的细粒度控制。
ex。控制器:
[HttpGet] public ActionResult Index() { OrderRepository repository = new OrderRepository(); var shipTypes = repository.GetAllShipTypes(); var orders = repository.GetAllOrders(); ViewBag.ShipTypes = shipTypes; return View(orders.First()); } [HttpPost] public ActionResult Index(Order order, [Deserialize] List<ShipType> shipTypes) { //Note order.ShipTypeId is populated. ViewBag.ShipTypes = shipTypes; return View(); }
,并在查看序列化它,如果你还需要你可以模仿视图状态MVC3Futures project使用它在组合
@Html.Serialize("ShipTypes", ViewData["ShipTypes"]) @Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })
。它可以让你保存整个模型。
您只需序列化模型并在视图中对其进行加密即可。
@Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)
并在控制器中添加反序列化属性。
public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)
这种问题我觉得非常有用。我现在不使用ASP.NET MVC,因为我目前不在使用网络资源,但我仍然想知道它,所以我可以在使用它时更快地找到它。 – NeedHack 2009-07-23 10:05:59
相关http://stackoverflow.com/a/2230635/52277 – 2012-05-10 21:42:39