- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有办法在调用 sort 时覆盖默认的 MVC3 WebGrid 排序行为以调用我的 Controller (它将执行服务器端排序并返回数据)?
谢谢你的帮助!
最佳答案
您可以将服务器端排序的数据以及有关有多少记录的信息传递给 webgrid。 http://msdn.microsoft.com/en-us/magazine/hh288075.aspx有一个有用的演练。我正在执行数据库级别的排序/过滤/分页以最大限度地减少传递的数据量。如果我传递客户拥有的所有 70,000 个对象,以便他们可以看到第 1 页上的 25 个对象,我认为我的网络服务器不会喜欢我。这几乎是您需要的一切,除了非常轻量级的 View 模型,它只是包装了您的 IEnumerable 集合带有一些额外的分页数据。
由于 Web 网格仅使用查询字符串 vars 来决定要做什么,因此您需要使用 get 方法形式。并且您需要以 webgrid 知道如何读取它的方式在查询字符串中包含排序字段/方向。所以你最终得到像 localhost/example/admin/thing?thingName=Hyatt&City=&State=TX&Country=&sort=city&sortdir=ASC 这样的网址
Controller :
public ActionResult Index(string thingName, string city, string state, string country, int page = 1)
{
const int pageSize = 25;
int totalRecords = 0;
IEnumerable<Thing> things = ThingModel.GetPagedSortedLocationsForCustomer(customerId, sort, sortdir, out totalRecords, pageSize, page, thingName, city, state, country);
PagedThings viewModel = new PagedThings(pageSize, page, totalRecords, things);
return View(viewModel);
}
@model ExampleCompany.Area.ViewModels.PagedThings
@{
using (Html.BeginForm("Index", "ThingaMaBob", System.Web.Mvc.FormMethod.Get))
{
<label for="ThingName">ThingName</label>@Html.TextBox("ThingName", "")
<label for="City">City</label>@Html.TextBox("City", "")
<label for="State">State</label>@Html.TextBox("State", "")
<label for="Country">Country</label>@Html.TextBox("Country", "")
<input type="submit" value="Filter" />
<br />
var grid = new WebGrid(canPage: true, rowsPerPage: Model.PageSize, canSort: true);
grid.Bind(Model.Things, rowCount: Model.TotalRows, autoSortAndPage: false);
grid.Pager(WebGridPagerModes.All);
@grid.GetHtml(htmlAttributes: new { id = "grid"},
columns: grid.Columns(
//ommitted
grid.Column("thingName", "Thing"),
));
Html.Hidden(grid.SortFieldName, grid.SortColumn);
Html.Hidden(grid.SortDirectionFieldName, grid.SortDirection == SortDirection.Ascending ? "ASC" : "DESC");
}
public static IEnumerable<Thing> GetPagedSortedThingsForCustomer(int customerid, String sortby, String sorttype, out int totalRecords, int pageSize, int pageIndex, string thingName, string city, string state, string country)
{
var tmp = new List<Thing>();
int total = 0;
dynamic dr = OurDBUtility.ReturnDR("ExampleProc_GetThingsSortedPaged", ConnectionInfo.ExampleConnection, customerid, sortby, sorttype, pageSize, pageIndex, thingName, city, state, country);
{
while (dr.Read())
{
var tmpThing = new Thing();
tmpThing.LoadFromDr(dr);
tmp.Add(tmpThing);
if (total == 0)
{
total = (int)dr["TOTAL_THINGS"];
}
}
}
totalRecords = total;
return tmp;
}
CREATE PROCEDURE ExampleProc_GetThingsSortedPaged
( @CustomerId int
, @sortby nvarchar(60)
, @sorttype nvarchar(60)
, @pageSize int
, @pageIndex int
, @thingName nvarchar(255) = null
, @city nvarchar(30) = null
, @state nvarchar(30) = null
, @country char(2) = null
)
as
DECLARE @strSql nvarchar(3000)
--calculate paging rows
declare @startRow int, @endRow int
--e.g. if you have a page size of 10, page 1 = 1 - 10, page 2 = 11 -20
set @startRow = ((@pageIndex - 1) * @pageSize) + 1
set @endRow = @startRow + @pageSize - 1
if @thingName = ''
set @thingName = null
if @city = ''
set @city = null
if @state = ''
set @state = null
if @country = ''
set @country = null
--return total for webgrid, accounting for filter
declare @totalThings int
select @totalThings = COUNT(*)
from EXAMPLE_TABLE T with(nolock)
where CUSTOMER_ID = @CustomerId
AND (T.THING_NAME LIKE @thingName + '%' OR @thingName is null)
AND (T.CITY LIKE @city + '%' or @city is null)
AND (T.STATE LIKE @state + '%' or @state is null)
AND (T.COUNTRY = @country or @country is null)
DECLARE @ParameterDefinition AS NVARCHAR(200)
set @ParameterDefinition = '@totalThings int, @CustomerId INT, @startRow INT, @endRow INT, @thingName nvarchar(255), @city nvarchar(30), @state nvarchar(30), @country char(2)'
--When we need to do dynamic sql it is better to use paramterization, but you cannot do (ORDER BY @sortBy).
SET @strSql = N'SELECT * from
(
select ROW_NUMBER() OVER (ORDER BY T.' + @sortby + ' ' + @sorttype + ') as Row,
@totalThings [TOTAL_THINGS],
T.THING_ID, T.THING_NAME, T.ADDRESS, T.CITY, T.STATE,
T.ZIP_CODE, T.COUNTRY
FROM EXAMPLE_TABLE T
WHERE T.CUSTOMER_ID = @CustomerId
AND (T.THING_NAME LIKE @thingName + ''%'' OR @thingName is null)
AND (T.CITY LIKE @city + ''%'' or @city is null)
AND (T.STATE LIKE @state + ''%'' or @state is null)
AND (T.COUNTRY = @country or @country is null)
) paged
where Row between @startRow and @endRow
ORDER BY Row'
--print @strSql
EXECUTE sp_executesql @strSql, @ParameterDefinition, @totalThings, @CustomerId, @startRow, @endRow, @thingName, @city, @state, @country
GO
CREATE PROCEDURE ExampleProc_GetThingsSortedPaged
( @CustomerID int
, @sortby nvarchar(60)
, @sorttype nvarchar(60)
, @pageSize int = 25
, @pageIndex int = 1
, @thingName nvarchar(255) = null
, @city varchar(30) = null
, @state nvarchar(30) = null
, @country char(2) = null
)
as
declare @startRow int
declare @endRow int
SET @startRow = ((@pageIndex - 1) * @pageSize) + 1;
SET @endRow = @startRow + @pageSize - 1;
set @sortby = replace(LOWER(@sortby), '_', '')
SET @sorttype = LOWER(@sorttype)
if @sorttype != 'asc' and @sorttype != 'desc'
begin
set @sorttype = 'asc'
end
;with cte_things as (
SELECT
CASE
WHEN @sortby ='country' AND @sorttype = 'asc' then row_number() over (order by C.COUNTRY_NAME ASC)
WHEN @sortby ='country' AND @sorttype = 'desc' then row_number() over (order by C.COUNTRY_NAME DESC)
WHEN @sortby ='state' AND @sorttype = 'asc' then row_number() over (order by STATE ASC)
WHEN @sortby ='state' AND @sorttype = 'desc' then row_number() over (order by STATE DESC)
WHEN @sortby ='city' AND @sorttype = 'asc' then row_number() over (order by CITY ASC)
WHEN @sortby ='city' AND @sorttype = 'desc' then row_number() over (order by CITY DESC)
WHEN @sortby ='thingname' AND @sorttype = 'desc' then row_number() over (order by THING_NAME DESC)
ELSE row_number() over (order by THING_NAME ASC)
END AS Row
,T.THING_ID, T.THING_NAME, T.THING_TYPE, T.ADDRESS, T.CITY, T.STATE
, T.ZIP_CODE, T.COUNTRY_CODE, C.COUNTRY_NAME, T.PHONE_NUMBER
, T.LATITUDE, T.LONGITUDE
FROM EXAMPLE_TABLE L
join COUNTRIES C
on C.COUNTRY_CODE = L.COUNTRY_CODE
where
T.CUSTOMER_ID = @CustomerId
and L.CITY = ISNULL(@city, CITY)
and L.STATE = ISNULL(@state, STATE)
and L.COUNTRY_CODE = ISNULL(@country, L.COUNTRY_CODE)
and L.THING_NAME = ISNULL(@thingName, THING_NAME)
)
, cte_total as (select COUNT(*) as TOTAL_THINGS from cte_things)
, cte_all as (select cte_things.*, cte_total.TOTAL_THINGS from cte_things cross join cte_total)
SELECT * FROM cte_all
where
Row >= @startRow
and Row <= @endRow
ORDER BY Row
GO
关于asp.net-mvc-3 - ASP.NET MVC3 WebGrid - 自定义的服务器端排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10121735/
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!