代码之家  ›  专栏  ›  技术社区  ›  Hemant

ViewState在ASP.NET MVC中是否相关?

  •  27
  • Hemant  · 技术社区  · 15 年前

    我正在学习ASP.NETMVC,许多“ASP.NET”的概念,如身份验证、授权、会话状态仍然适用于它。

    5 回复  |  直到 15 年前
        1
  •  9
  •   thebitguru    12 年前

    是的,没错。ViewState不相关。有关页面模型和MVC之间差异的更多信息,请参见:

    Compatibility of ASP.NET Web Forms and ASP.NET MVC

        2
  •  6
  •   AnthonyWJones    15 年前

        3
  •  3
  •   Adam Tuliper    13 年前

    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
  •   eyesnz    15 年前

    我个人认为它过时了。我唯一一次在ASP.NETMVC应用程序中看到ViewState是当有人“意外”将ASP.Net控件添加到页面时。

        5
  •  0
  •   jan salawa    11 年前

    如果需要,可以使用模拟视图状态 MVC3Futures project

    您所要做的就是序列化模型并在视图中加密它。

    @Html.Serialize("Transfer", Model, SerializationMode.EncryptedAndSigned)
    

    并在控制器中添加反序列化属性。

    public ActionResult Transfer(string id,[Deserialize(SerializationMode.EncryptedAndSigned)]Transfer transfer)