Подтвердить что ты не робот

Является ли ViewState релевантным в ASP.NET MVC?

Я изучаю ASP.NET MVC, и многие концепции "ASP.NET", такие как аутентификация, авторизация, состояние сеанса, по-прежнему применяются к нему.

Но из того, что я понял, я не вижу, что ViewState все еще имеет значение в приложении ASP.NET. Но он есть (свойство System.Web.Mvc.ViewPage)! Он существует только по соображениям совместимости или у него все еще есть какая-то цель/использование?

4b9b3361

Ответ 2

Его настоящее, потому что ViewPage наследуется от страницы. Однако сама страница не использовалась для ViewState, используемой WebControls. В представление можно включить оригинальные WebControls, но при этом полностью отсутствует точка разделения управления из представления.

Ответ 3

ViewState не имеет отношения к делу, однако он обеспечивает отличную функциональность. Нам не приходилось каждый раз перезагружать данные или беспокоиться о кешировании каждого элемента и т.д. ViewState также обеспечил некоторую безопасность - это предотвратило определенную степень фальсификации формы. Если вы связали поле со списком, это заставило людей перебирать значения, поскольку они были сопоставлены с хеш-представлением и не подтвердили правильность, если он был запутан. Для этого ViewState был довольно приятным. Проблема в том, что на большинстве страниц он очень большой, так как люди не отключили viewstate для того, за что им это не нужно.

Хорошо - как это решить? Проект MVC Futures от Microsoft содержит метод Html.Serialize и в сочетании с атрибутом [Deserialize] в качестве параметра метода, который обеспечивает очень мелкозернистый контроль над "viewstate", то есть сериализацию.

ех. в контроллере:

 [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();
        }

а в сериализации View я и ALSO использовать его в комбо

@Html.Serialize("ShipTypes", ViewData["ShipTypes"])
        @Html.DropDownList("ShipTypeId", ((List)ViewData["ShipTypes"]).ToSelectList("ShipTypeId", "Description"), new { @class = "combobox11" })



Ответ 4

Лично я считаю его устаревшим. Единственный раз, когда я видел ViewState в приложении ASP.Net MVC, когда кто-то "случайно" добавил элемент ASP.Net на страницу.

Ответ 5

Если вам нужно, вы можете имитировать состояние представления с помощью проекта MVC3Futures. Это позволит вам сохранить всю модель в поле зрения.

Все, что вам нужно сделать, это сериализовать модель и зашифровать ее в поле зрения.

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

И в контроллере добавить десериализованный атрибут.

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