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" })
この種の質問は非常に便利です。私は現在、ASP.NET MVCを使用していません。なぜなら、私は現在、ウェブのことをやっているわけではありませんが、それについて知りたいからです。 – NeedHack
に関連するhttp://stackoverflow.com/a/2230635/52277 –