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

解决方案 »

  1.   

    mvc就不能用viewstate了,在contoller里实现状态保持机制吧..
      

  2.   

    将DropDownList的数据保存到model里头 用model来存呢,或者你将数据格式化成json存到页面的hidden域中
      

  3.   

    <%= Html.DropDownList("dplProvince", ViewData["ProvinceList"] as List<SelectListItem>)%>你的读取数量大么。。我做这个的时候 你问的这个问题基本上都被我忽略了。查查MVC缓存
      

  4.   


    数据是保存在Model里,但是Post之后,这个Model对象值没有被保存。需要重新去查询
      

  5.   

    Controler里如何实现model还原,使用缓存还是?
      

  6.   

    那就用webform呗,用webform的时候嫌垃圾代码多,用了mvc又嫌麻烦...
      

  7.   

    可以用 cache, mvc里的 model state 和 view state 有些类似,但是很不幸,下拉列表里的项model state 不管
      

  8.   

    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秒才会更新一次,如果你不停的刷就可以看出效果
      

  9.   

    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
      

  10.   

    ASP.NET MVC没有ViewState,不要用webform的概念来理解asp.net mvc
      

  11.   

    viewState webfrom里的  如果想实现 就用缓存吧
      

  12.   

    VIEWSTATE是不能跨页的哦~
    要避免刷新被重新初始化的话,直接在该页面上使用Viewstate。也有另一个方法就是保存在CACHE里面。
      

  13.   

    cache,session可以用,但没有了页面状态
      

  14.   

    ViewData只能将数据从一个页面传递到下一个页面吧
      

  15.   

    你post过去什么东西重新绑定一遍不就好了
    这都嫌麻烦的话就不要用mvc了
      

  16.   

    可用TempData这个dictionary的数据结构来保存,不过要小心,这里面的数据要过期的。
      

  17.   

    我们用的时候,是想把那个查询条件存起来,下一页的时候继续用。开始是存到session里面,但我总觉得这个很容易丢失,所以不想用这个,结果同事想了个招儿:每次来了就重新存一下
      

  18.   

    ViewState不是那么可怕吧其实ViewState重要的不是保持服务器端数据,而是保持用户输入比如表单提交过程中验证没通过,如果是js验证还好,如果是服务器验证就惨了,刷新一下,又要全部重新输入啊其实ViewState有重要作用,可惜mvc把它完全放弃了,自己动手吧可以在后台controller中任何Action处理之前先保持表单数据,然后在return view之前时候恢复数据就是说后台写两个private的function了,不知道可不可以通过扩展controller实现呢