1
9
是的,没错。ViewState不相关。有关页面模型和MVC之间差异的更多信息,请参见: |
2
6
|
3
3
ViewState与此无关,但它提供了一些很棒的功能。我们不必每次都重新加载数据,也不必担心缓存每个项目等等。 ViewState还提供了一些安全性—它防止了一定程度的表单篡改。如果您绑定了一个组合框,那么在将这些值与散列的viewstate进行比较时,它会阻止人们篡改这些值,如果这些值被弄乱,验证就会失败。为此,ViewState相当不错。问题是它在大多数页面上变得非常大,因为人们没有关闭viewstate,因为他们不需要它。 好的-如何解决这个问题? Microsoft的MVC Futures项目包含Html.Serialize方法,并结合[Deserialize]属性作为方法参数,这提供了对“viewstate”ie序列化的细粒度控制。
[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(); }
@Html.Serialize("ShipTypes", ViewData["ShipTypes"]) @Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" }) |
4
2
我个人认为它过时了。我唯一一次在ASP.NETMVC应用程序中看到ViewState是当有人“意外”将ASP.Net控件添加到页面时。 |
5
0
如果需要,可以使用模拟视图状态 MVC3Futures project 您所要做的就是序列化模型并在视图中加密它。
并在控制器中添加反序列化属性。
|
Deverill · 如何在web应用程序中高效存储信息 11 年前 |
SausageBuscuit · 按下后退按钮时触发ASP.NET按钮事件 11 年前 |
markzzz · 如何在处理WebForm之前调用母版页的父级? 11 年前 |