日期:2014-05-17  浏览次数:20438 次

asp.net MVC如何保存ViewState状态?
页面使用model绑定,如果页面有下拉框之类的值(需要从数据库取),但是每次Post的时候,都要重新赋值,导致额外的开销,有没有好的方法,像webform里加载一次,第2次默认从viewState还原????就是从数据库取一次值,绑定到DropDownList,后面的表单提交或者刷新,把DropDownListFor值恢复回来,而不用在去数据库查询???

------解决方案--------------------
mvc就不能用viewstate了,在contoller里实现状态保持机制吧..
------解决方案--------------------
将DropDownList的数据保存到model里头 用model来存呢,或者你将数据格式化成json存到页面的hidden域中
------解决方案--------------------
<%= Html.DropDownList("dplProvince", ViewData["ProvinceList"] as List<SelectListItem>)%>

你的读取数量大么。。

我做这个的时候 你问的这个问题基本上都被我忽略了。

查查MVC缓存
------解决方案--------------------
mvc没用过,,,
------解决方案--------------------
确实,只能保存表单提交的值
------解决方案--------------------
那就用webform呗,用webform的时候嫌垃圾代码多,用了mvc又嫌麻烦...
------解决方案--------------------
可以用 cache, mvc里的 model state 和 view state 有些类似,但是很不幸,下拉列表里的项model state 不管
------解决方案--------------------
controller:
[OutputCache(CacheProfile = "ProcessInfoCache")]
public ActionResult Welcome()
{
ViewData["now"] = DateTime.Now.ToString();
return View();
}
-------------------------
View:
<span>@ViewData["now"]</span>
------------------------------
web.config:
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<clear/>
<add name="ProcessInfoCache" duration="10" enabled="true" varyByParam="*" />
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
-----------------------------
这个例子上面的时间,至少10秒才会更新一次,如果你不停的刷就可以看出效果
------解决方案--------------------
dropdownlist 保持状态的方法

view:
<td>
<%=Html.DropDownList("LivingCountry", ViewData["LivingCountryViewData"] as IEnumerable<SelectListItem>, "--select one--")%>&nbsp;
<%=Html.ValidationMessage("LivingCountryV")%></td>

cotroller:
DataContext dc = new DataContext();//LINQ TO SQL
#region LivingCountry dropdownlist status
if (Request.Form["LivingCountry"].Trim().ToString() != "")
{
var LivingCountryitem = from c in dc.DTCountries
select new SelectListItem { Text = c.CountryName, Value = c.CountryName, Selected = (c.CountryName == Request.Form["LivingCountry"].Trim().ToString()) };
ViewData["LivingCountryViewData"] = LivingCountryitem;
}
else
{
ViewData["LivingCountryViewData"] = from c in dc.DTCountries
select new SelectListItem { Text = c.CountryName, Value = c.CountryName, };
}
#endregion
------解决方案--------------------
ASP.NET MVC没有ViewState,不要用webform的概念来理解asp.net mvc
------解决方案--------------------
viewState webfrom里的 如果想实现 就用缓存吧
------解决方案--------------------