Asp.net mvc 3 通过复选框WebFrom和Cookie查看数据库列
我使用的是telerik MVC模板,数据库中有大量列,telerik网格没有水平滚动条,因此我创建了复选框,供用户选择他们想要查看的列。它工作得很好,当我第一次进入页面时,它会在顶部显示复选框,下面是应用按钮和网格视图。因为没有从WebForm提交任何内容,所以网格视图显示所有列。在添加cookie之前,用户只需按一次apply键,即可显示这些列。但是,如果用户随后尝试对其中一列进行排序或筛选,它将恢复为显示所有列。因此,我创建了一个cookie来存储所选信息。不幸的是,这只对选择第一个过滤器有所帮助。如果使用第二个过滤器,它将再次显示所有列,而不仅仅是选定的列。此外,用户现在必须按“应用”两次才能在网格视图上正确显示其选择。以下是我如何对所有内容进行编码的简要说明: 索引视图Asp.net mvc 3 通过复选框WebFrom和Cookie查看数据库列,asp.net-mvc-3,cookies,checkbox,telerik-grid,telerik-mvc,Asp.net Mvc 3,Cookies,Checkbox,Telerik Grid,Telerik Mvc,我使用的是telerik MVC模板,数据库中有大量列,telerik网格没有水平滚动条,因此我创建了复选框,供用户选择他们想要查看的列。它工作得很好,当我第一次进入页面时,它会在顶部显示复选框,下面是应用按钮和网格视图。因为没有从WebForm提交任何内容,所以网格视图显示所有列。在添加cookie之前,用户只需按一次apply键,即可显示这些列。但是,如果用户随后尝试对其中一列进行排序或筛选,它将恢复为显示所有列。因此,我创建了一个cookie来存储所选信息。不幸的是,这只对选择第一个过滤器
我现在只在索引ActionResult中工作,以便在我找出如何使这一切正常工作的同时将事情保持在一个位置。有人知道为什么我必须按两次应用,为什么我不能使用多个过滤器,以及如何避免这种情况吗?事实证明,我必须按两次应用,为什么应用多个过滤器会导致问题,是因为我在索引ActionResult中有所有内容。一旦我将所有表单数据移动到它自己的ActionResult,然后重定向到ActionIndex,一切都很好
<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);
}