我正在學習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