asp.net-mvc – asp.net mvc 3 webgrid排序依然?sortdir = ASC
我在asp.net mvc中尝试了几个网格.
微软有一个网格也知道在mvc 3的预发行,所以我以为我会尝试一个. 基本功能很容易实现,但是当涉及到排序时,我遇到了一些问题. 现在您可以期待在对某列进行排序后,该列上的sortdir querystring将更改为?sortdir = DESC 另一个非常讨厌的事情:如果我点击排序链接,httpget请求就完成了. 有什么想法或想法吗? greetz,柯恩 视图的代码如下: <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <table> <tr> <td> <h1 class="normal">List of subscription</h1> </td> <td> </td> </tr> </table> <% using (Html.BeginForm("List","Subscription",FormMethod.Post)) { %> <table border="0" cellpadding="0" cellspacing="5"> <tr> <td> Search By </td> <td> <%: Html.DropDownListFor(m => m.SearchByColumn,Ogone.FrontEnd.Web.Controllers.SubscriptionController.SubscriptionSearchList) %> </td> <td> <%: Html.TextBoxFor(m => m.SearchByText) %> </td> <td> <input name="button" type="submit" value="Search" /> </td> </tr> </table> <div> <% var grid = new System.Web.Helpers.WebGrid(Model.SubscriptionList,columnNames: new List<string>(){"Title"},canPage:false); %> <%= grid.GetHtml(columns: grid.Columns( grid.Column(format: (item) => Html.ActionLink("Edit","Edit",new { id = item.ID })),grid.Column("ID"),grid.Column("ISP"),grid.Column("ABONNEMENT"),grid.Column("MODE"),grid.Column("SETUPFEE"),grid.Column("MONTHLYFEE")) ) %> </div> 解决方法
这是因为网格列名称必须与您的字段或属性对应.在网格标题中生成网址的方法将“排序”与url查询字符串与有界列和网格列名称进行比较.其中三个必须是一样的.如果您的列名称的定义配置不正确,则不会正确生成该URL.
无论如何..这里有一些正确定义的列名称的例子. 这里我们要显示示例域类 public class Person { public string FirstName; public string LastName; public Address LivesIn; } public class Address { public string Country; public string City; } 现在让我们显示List 使用您的列名称作为字段 grid.Column("FirstName"),grid.Column("LastName"),grid.Column("LivesIn.City"),grid.Column("LivesIn.Country") …所有列都有正确的排序网址 如果您在列名中输入错字,则会出现异常 grid.Column("FirstName"),grid.Column("MyLastName"),<-- this throws exception grid.Column("LivesIn.City"),grid.Column("LivesIn.Country") 但是您可以使用格式,也不会抛出异常 grid.Column("FirstName"),grid.Column("MyLastName",format: item => item.LastName</text>),grid.Column("LivesIn.Country") …但排序的列MyLastName的URL将是BAD !!!所有的时间sortDir = ASC 您需要使用良好的列名称具有适当的排序网址和自定义格式,所以… grid.Column("FirstName"),grid.Column("LastName",format: item => item.LastName),grid.Column("LivesIn.Country") … 一切都好 复杂类型怎么样? grid.Column("FirstName"),grid.Column("LivesIn.MyNonExistingField",format: item => item.LivesIn.City),grid.Column("LivesIn.Country") ….哇…一切都好了..这是一个小孩的bug ..列“LivesIn.MyNonExistingField”有适当的排序url. 好吧,如果我们不想公开我们的域结构怎么办?然后我们需要在绑定期间添加列名称列表 var grid = new WebGrid(persons,columnNames: new [] { "Foo" }); -- or -- grid.Bind(persons,columnNames: new [] { "Foo" }); grid.Column("Foo",format: item => item.FirstName),grid.Column("LivesIn.Country") ..现在Foo列有适当的排序url 但小心!!!还有另一个错误. 如果我们将手动列名称添加到绑定中,那么将跳过所有列,直到找到手动列.示例: var grid = new WebGrid(persons,columnNames: new [] { "Foo" }); grid.Column("FirstName"),grid.Column("Foo",grid.Column("LivesIn.Country") …排序URL列“FirstName”将不会正确生成… sortDir = ASC所有的时间…修复此添加一个“FirstName”作为列名称,如下所示: var grid = new WebGrid(persons,columnNames: new [] { "FirstName","Foo" }); -- or -- grid.Bind(persons,"Foo" }); grid.Column("FirstName"),grid.Column("LivesIn.Country") @Kohen 在您的代码中删除列名称 var grid = new System.Web.Helpers.WebGrid(Model.SubscriptionList,canPage:false); …或添加所有的列名称,如“ID”,“ISP”等 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 在C#中从IronPython调用时引用Python“导入”程
- asp.net-mvc – 只读一个下拉列表,但仍然提交其值
- asp.net-mvc – 为什么HttpContext.Current在asp.net mvc中
- asp.net-mvc-3 – 允许没有找到Html属性[AllowHtml]
- asp.net-mvc – MVC在导航栏中显示登录用户的名称
- asp.net-mvc – DisplayFormat未应用于十进制值
- asp.net – 如何在IIS 7.5上调试经典的asp页面Visual Studi
- asp.net-mvc – 如何在HTML属性中添加剃刀值和字符串?
- asp.net-core – 在区域视图中使用TagHelpers
- asp.net Web项目中使用Log4Net进行错误日志记录
- ASP.NET -- WebForm -- Session的使用
- asp.net – 使用ASP:文本框作为
- 如何在ASP.NET中使用多个授权方案发布相应的承载
- asp.net-mvc-4 – .net 4.5 ASP.Net web API JSO
- asp.net-mvc – dropzone.js和ASP.NET MVC文件发
- asp.net – 如何正确编码mailto链接?
- 在ASP.NET中使用回发??的jQuery模态对话框
- asp.net-mvc – 如何传递特殊字符使ASP.NET MVC可
- asp.net MVC 权限设计 asp.net MVC 权
- asp.net-mvc – 保存为“BodyPart_3ded2bfb-40be