gpt4 book ai didi

asp.net-mvc - asp.net mvc 3 webgrid 排序仍然存在 ?sortdir=ASC

转载 作者:行者123 更新时间:2023-12-02 05:21:17 26 4
gpt4 key购买 nike

我正在 asp.net mvc 中尝试一些网格。Microsoft 在 mvc 3 的预发行版中也有一个网格,所以我想我会尝试一下。

基本功能很容易实现,但是当涉及到排序时,我遇到了一些问题。网格按照 url 进行排序。在 url 中,您可以按以下方式获得排序列和排序方向: ?sortdir=ASC&sort=放弃

现在您可能会期望在对特定列进行排序后,该列上的 sortdir 查询字符串将更改为 ?sortdir=DESC但事实并非如此。它保留 ?sortdir=ASC 。有谁知道这是一个错误还是一个功能,以及如何解决这个问题?

另一件非常烦人的事情:如果我单击排序链接,就会完成 httpget 请求。因此我失去了我的模型。因为页面上可以过滤网格(搜索功能),所以我想将其保留在模型中。在我看来,将这些数据放入模型状态比将其存储在 session 状态中是一个更容易和更干净的解决方案。是否可以更改排序 header 链接的行为,以便执行 http post?

对此有什么想法或想法吗?Tnx 寻求帮助。

科恩,问候

View 的代码如下:

<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 查询字符串中的“排序”与有界列和网格列名称进行比较。他们三人一定是同一个人。如果您的列名称定义配置不正确,则将无法正确生成 url。

无论如何..这里是一些正确定义的列名称的示例。

这里我们有示例域类要显示

public class Person
{
public string FirstName;
public string LastName;
public Address LivesIn;
}

public class Address
{
public string Country;
public string City;
}

现在让我们显示列表

使用列名称作为字段

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")

但是可以使用format,不会抛出异常

grid.Column("FirstName"),
grid.Column("MyLastName", format: item => item.LastName</text>),
grid.Column("LivesIn.City"),
grid.Column("LivesIn.Country")

...但是 MyLastName 列的排序 url 会很糟糕!始终sortDir=ASC

您需要使用良好的列名称来拥有正确的排序 url 和自定义格式,以便...

grid.Column("FirstName"),
grid.Column("LastName", format: item => item.LastName),
grid.Column("LivesIn.City"),
grid.Column("LivesIn.Country")

...一切都好

复杂类型怎么样?

grid.Column("FirstName"),
grid.Column("LastName"),
grid.Column("LivesIn.MyNonExistingField", format: item => item.LivesIn.City),
grid.Column("LivesIn.Country")

...哇...一切都好..那是bug的 child ..列“LivesIn.MyNonExistingField”有正确的排序网址。

好的...如果我们不想公开我们的域结构怎么办?然后我们需要在绑定(bind)时添加列名列表

var grid = new WebGrid(persons, columnNames: new [] { "Foo" });
-- or --
grid.Bind(persons, columnNames: new [] { "Foo" });

grid.Column("Foo", format: item => item.FirstName),
grid.Column("LastName"),
grid.Column("LivesIn.MyNonExistingField", format: item => item.LivesIn.City),
grid.Column("LivesIn.Country")

.. 现在 Foo 列具有正确的排序 url

但是要小心!还有一个错误。

如果我们将手动列名称添加到绑定(bind)中,则将跳过所有列,直到找到手动列。示例:

var grid = new WebGrid(persons, columnNames: new [] { "Foo" });
-- or --
grid.Bind(persons, columnNames: new [] { "Foo" });

grid.Column("FirstName"),
grid.Column("Foo", format: item => item.LastName),
grid.Column("LivesIn.MyNonExistingField", format: item => item.LivesIn.City),
grid.Column("LivesIn.Country")

...列“FirstName”的排序 url 将无法正确生成...sortDir=ASC 始终...要解决此问题,还需要添加一个“FirstName”作为列名称,如下所示:

var grid = new WebGrid(persons, columnNames: new [] { "FirstName", "Foo" });
-- or --
grid.Bind(persons, columnNames: new [] { "FirstName", "Foo" });

grid.Column("FirstName"),
grid.Column("Foo", format: item => item.LastName),
grid.Column("LivesIn.MyNonExistingField", format: item => item.LivesIn.City),
grid.Column("LivesIn.Country")

@科恩

在此处删除代码中的columnNames

var grid = new System.Web.Helpers.WebGrid(Model.SubscriptionList,  
columnNames: new List<string>(){"Title"},
canPage:false);

...或在其中添加所有列名称,例如“ID”、“ISP”等

关于asp.net-mvc - asp.net mvc 3 webgrid 排序仍然存在 ?sortdir=ASC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518039/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com