- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经实现了 WebGrid。排序、分页和过滤不能一起工作。当您单独使用它们时,它们会起作用。当您同时结合这三者时,过滤不起作用。
症状:
过滤结果集,然后排序。
或
过滤结果集,然后转到下一页。
在这两种情况下,过滤器都丢失了。但它会分页和排序。
在后面的代码中:当通过排序或分页调用操作方法时,每个过滤器参数都会显示空值。
当通过过滤器调用 Action 方法时,过滤器参数通过。
这告诉我,当您启动排序或分页时,它并没有提交表单。
public ActionResult MyPage(int? page, int? rowsPerPage,
string sort, string sortdir,
string orderNumber, string person, string product)
我查看了 SO 和其他地方。有很多例子和人们询问如何做一个或另一个或所有三个。但我只看到one with my issue ,所以我把它贴在这里。 (他的也没有解决)
我的页面实现如下:
@using (Ajax.BeginForm("MyPage", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }, new { id = "filter" }))
{
<div class="right">
<select id="rowsPerPage" name="rowsPerPage">
<option>15</option>
<option>25</option>
<option>50</option>
<option>75</option>
<option>100</option>
</select>
</div>
<div class="table">
<div class="tableRow">
<div class="tableCell">
Order Number
</div>
<div class="tableCell">
Person
</div>
<div class="tableCell">
Product
</div>
</div>
<div class="tableRow">
<div class="tableCell">
<input type="text" id="orderNumber" name="orderNumber" />
</div>
<div class="tableCell">
<input type="text" id="person" name="person" />
</div>
<div class="tableCell">
<input type="text" id="product" name="product" />
</div>
<div class="tableCell">
<input type="submit" class="button" value="Search" />
</div>
</div>
</div>
<br/>
<div id="myGrid">
@Html.Partial("_MyPage", Model)
</div>
}
网格实现为这样的局部 View :
<script type="text/javascript">
$(document).ready(function () {
resetUI();
});
</script>
@{
var grid = new WebGrid(canPage: true, rowsPerPage: Model.rowsPerPage, canSort: true, ajaxUpdateContainerId: "grid", ajaxUpdateCallback: "resetUI");
grid.Bind(Model.rows, rowCount: Model.TotalRecords, autoSortAndPage: false);
@grid.GetHtml(
tableStyle: "fancyTable",
headerStyle: "header",
footerStyle: "footer",
rowStyle: "row",
alternatingRowStyle: "alt",
mode: WebGridPagerModes.Numeric | WebGridPagerModes.NextPrevious,
nextText: "Next",
previousText: "Previous",
htmlAttributes: new { id = "grid" },
columns: grid.Columns(
grid.Column("OrderDate", "Order Date", format: @<text>@((item.OrderDate != null) && (item.OrderDate.ToString("MM/dd/yyyy") != "01/01/0001") ? item.OrderDate.ToString("MM/dd/yyyy") : "")</text>),
grid.Column("OrderNumber", "Order Number"),
grid.Column("Field1, "Field 1"),
grid.Column("Field2", "Field 2"),
grid.Column("Person", "Person"),
grid.Column("Product", "Product"),
grid.Column(format: (item) => Html.ActionLink("View", "Details", new { id = item.orderNumber }))
)
);
}
最佳答案
在构建分页和排序链接时,WebGrid 助手会考虑当前 url 中存在的所有查询字符串参数。它忽略 POSTed 和路由值。并且由于您的搜索表单 POST,用户在此表单中输入的值不存在于查询字符串中,因此它们不是分页和排序链接的一部分,当您单击其中一个链接时,这些值是丢失。这是设计使然。
因此解决这个问题的一种方法是替换您的 AjaxForm:
@using (Ajax.BeginForm("MyPage", null, new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }, new { id = "filter" }))
使用 GET 动词的标准 HTML 表单:
@using (Html.BeginForm("MyPage", null, FormMethod.Get))
或使用 GET 动词的 AJAX 表单:
@using (Ajax.BeginForm("MyPage", null, new AjaxOptions { HttpMethod = "Get", InsertionMode = InsertionMode.Replace, UpdateTargetId = "myGrid" }, new { id = "filter" }))
现在,当用户想要过滤某些东西并点击搜索提交按钮时,他在搜索表单中输入的值将最终出现在查询字符串中,并且在呈现 WebGrid 助手时将使用它们来生成其排序和页面链接以及当然,当您单击这些链接时,这些值将被发送到服务器。
如果您想对此进行更多控制,您可以考虑使用更高级的网格控件,例如 MvcContrib.Grid或 Telerik Grid for ASP.NET MVC .
关于c# - 在 .NET 4.0 中,过滤器在 WebGrid + 分页 + 排序 + 过滤中丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10051794/
我正在尝试为 Webgrid 列设置宽度。但它不起作用。 请任何人帮助我。 请在我的代码下面找到 @grid.GetHtml( tableStyle: "webgrid-table", headerS
我在单个 View 上有 2 个 WebGrid,它们使用相同的模型。现在的问题是,每当我在单个 webgrid 上应用排序时,它也会对另一个 webgrid 进行排序。我正在使用 fieldName
我正在阅读和听到一些痛点,想知道我是否应该走那条路。更不用说,我似乎找不到任何权威文档(来自 Microsoft)。如果你说我不应该使用它,你会建议什么路线?我正在尝试建立一个新网站,但我想第一次就做
我试图显示一个进度条,直到我的网格完全加载,我看到了他们基于按钮点击的各种方法,但我无法想出一种方法来显示进度条,直到我的网格完全加载以及何时我导航到 webgrid 中的其他页面。这是我第一次使用
我正在 MVC3 中使用 WebGrid 进行一些部分页面更新,但是当我使用 $('#grid').html(data) 更新网格,然后单击网格中的列/链接以按该列排序时,我的页面重新加载时仅使用非
我正在开发 ASP.NET WebGrid,用于显示对象集合并允许向集合添加新对象。 在 Webgrid View 上,我有一个“添加”按钮,使用该按钮我可以根据模板动态添加新行并附加到网格。 我需要
我正在使用 MVC 3 webgrid,我需要在 webgrid 中添加一个新行以显示产品表中的价格总和。 任何想法都表示赞赏。 这是我的代码 @{ WebGrid grid = new WebGri
我正在尝试找到一种方法使整行都可点击。到目前为止,我发现的教程使用表格上可见的项目来为每行创建链接。例如 $(function(){ $('tbody tr').live('hover', f
我一直在开发一个 asp.net mvc 3 应用程序,我正在使用 webgrid 在我的 View 中显示表格数据。我的问题是,如何通过计算数据库中的记录数来分页一些数据,并在网格的页脚中显示 we
我已经设置了一个 webgrid,它似乎工作正常,允许我排序和分页。我添加了一个过滤器选项,该选项也很好用,但是如果我过滤并然后对结果进行排序,过滤器将丢失并显示所有记录。 这是我的 Razor Vi
我正在尝试使用 Razor 使 WebGrid View 正常工作,到目前为止,我已经设法设置了除页脚的分页图标之外的大部分样式。 我搜索了很多地方以了解如何修改页脚的当前选定页面(文本)但无济于事。
我突然遇到了一个非常烦人的问题,我不知道它是怎么来的。 我正在使用此代码在我的 View 中生成一个表: @{ var grid = new WebGrid( Model, rowsPerPa
我正在使用 WebGrid 来显示我的数据库中的数据表。该表有一列包含数量。我希望有人能告诉我为什么这个网格没有排序? @{ WebGrid grid = new WebGrid(
我在部分页面中有我的 webgrid,如下所示。从下一页开始,我通过 ajax 调用在局部 View 中更新了我的网格。 @using (Html.BeginForm("Manage", "Book"
我有一个下拉列表和按钮控件,单击按钮时我绑定(bind)了 WebGrid,它工作正常,加载时网格将为空,但绑定(bind)后网格分页不起作用,下面是我的代码 @using (Html.BeginFo
基本上,这是我在 View 中的代码,我不想重复 WebGrid 实例。 我的模型 public class UsersWithDetailsModels { public IEnumerab
我正在使用新的 MVC3 WebGrid。到目前为止一切顺利,只是在样式/格式化列标题时遇到问题。我得到的最好的方法是将相同的 css 类从 WebGrid 的第一行应用到表标题。 var heade
是否有任何原因无法检查和取消选中复选框?如果我不触摸任何复选框,它会在按钮单击事件中选中和取消选中所有复选框。如果我手动选中某个框,则该框从此不会被修改,但其余部分将继续修改。 如何解决这个问题? f
我遇到了与此相同的问题 question . 我创建了一个应该与 WebGrid 一起工作的过滤器。过滤器适用于第一页,但如果您尝试转到其他页面或对结果进行排序,则过滤器将丢失。我按照上一个问题中的建
我在我的 webgrid 上使用 JS 对其进行排序时遇到问题。所以这个想法是用户在文本框中输入字符串,然后在不刷新空洞页面的情况下刷新下面的 webgrid(根据匹配结果过滤)。现在我的代码可以很好
我是一名优秀的程序员,十分优秀!