2011-09-23 64 views
0

我正在使用telerik MVC模板,并且拥有数量巨大的列数据库,并且telerik网格没有水平滚动条,所以我创建了供用户选择的复选框确切地说他们想要查看的列。它运行的很好,当我第一次进入页面时,它显示顶部的复选框,下面是“应用”按钮和网格视图。因为WebForm中没有提交任何内容,所以网格视图会显示所有列。在添加cookie之前,用户只需按一次申请,仅出现这些列。但是,如果用户尝试对这些列中的某一列进行排序或过滤,则会恢复为显示所有列。所以,我创建了一个cookie来存储选定的信息。不幸的是,这只能帮助选择第一个过滤器。如果使用第二个过滤器,它将再次显示所有列,而不是仅显示所选列。此外,用户现在不得不按两次应用他们的选择才能在网格视图中正确显示。下面是我怎么也得一切编码的简要说明:通过复选框查看数据库列WebFrom和Cookies

索引视图

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 
<% using (Html.BeginForm("Index", "Order")) 
    { %> 
    <p> 
     <%= Html.CheckBox("osurr", true, "Ad Number")%>Ad Number  //I set this and a few other columns to default to true 
     <%= Html.CheckBox("csurr", false, "Customer Number")%>Customer Number 
     <%= Html.CheckBox("rhosurr", false, "RHO Number")%>RHO Number 
     <%= Html.CheckBox("lockid", false, "Lock ID")%>Lock ID 
           //And several more 
    </p> 
    <input type="submit" value="Apply" /> 
<% } %> 
<% 
    Html.Telerik().Grid(Model) 
     .Name("Grid") 
     .Columns(columns => 
        { 
         columns.Template(o => 
               { 
%> 
         <%=Html.ActionLink("Detail", "Edit", new { id = o.osurr })%> 
        <% 
               }).Width(25); 


         if (Request.Cookies["DBCols"]["csurr"] != null) 
        { 
         if (Request.Cookies["DBCols"].Values["csurr"].Equals("True")) { columns.Bound(o => o.csurr).Title("Cust. No."); } 
        } 
        if (Request.Cookies["DBCols"]["rhosurr"] != null) 
        { 
         if (Request.Cookies["DBCols"].Values["rhosurr"].Equals("True")) { columns.Bound(o => o.rhosurr).Title("RHO No."); } 
        } 
        if (Request.Cookies["DBCols"]["lockid"] != null) 
        { 
         if (Request.Cookies["DBCols"].Values["lockid"].Equals("True")) { columns.Bound(o => o.lockid).Title("Lock ID"); } 
        } 
                            //And again, several more. 
        }) 
     .Groupable(grouping => grouping.Enabled(true)) 
     .Resizable(resizing => resizing.Columns(true)) 
     .Filterable(filter => filter.Enabled(true)) 
     .Sortable(sorting => sorting.Enabled(true)) 
     .Pageable(paging => paging.Enabled(true).PageSize(25)) 
     .Render(); 
%> 


</asp:Content> 

控制器

public ActionResult Index(bool? csurr, bool? rhosurr, bool? lockid /* And Several More */) 
{ 
ViewData["csurr"] = csurr ?? true; 
ViewData["rhosurr"] = rhosurr ?? true; 
ViewData["lockid"] = lockid ?? true; 

if ((bool)ViewData["csurr"]) { DBCols.Values["csurr"] = (ViewData["csurr"].ToString()); 
} 
else { DBCols.Values["csurr"] = "False"; } 
if ((bool)ViewData["rhosurr"]) { DBCols.Values["rhosurr"] = (ViewData["rhosurr"].ToString()); } 
else { DBCols.Values["rhosurr"] = "False"; } 
if ((bool)ViewData["lockid"]) { DBCols.Values["lockid"] = (ViewData["lockid"].ToString()); } 
else { DBCols.Values["lockid"] = "False"; } 
//And Several more 

var db = new MillieOrderDB(); 
var listView = from m in db.vw_cadords 
orderby m.createstamp descending 
select m; 
return View(listView); 
} 

我在指数的ActionResult公正的工作,现在让事情在一个地方,当我弄清楚如何让这一切工作。任何人有任何想法,为什么我不得不按两次申请,为什么我不能使用多个过滤器,以及如何避免这种情况?

回答

0

事实证明,我不得不击中两次的原因,以及为什么当应用多个筛选器导致问题时,是因为我拥有了Index ActionResult中的所有内容。一旦我将所有表单数据移动到它自己的ActionResult,然后做了RedirecttoAction(“索引”),一切正常!