我使用asp mvc razor + mvc grid创建一个应用程序。 我的问题是:我有一个视图包含多个返回局部视图的动作,在每个局部视图中都有一个显示数据的网格。我正在使用支持分页和排序的mvc contrib grid。
我的观点(index.cshtml):
<div class="row-fluid">
<div id="formations" class="control-group">
@Html.Action("Formations")
</div>
<div id="pools" class="control-group">
@Html.Action("Pools")
</div>
<div id="zones" class="control-group">
@Html.Action("Zones")
</div>
形成行动:
public ActionResult Formations(GridSortOptions sort, int? page, string filter = "all")
{
IPagination<StratUnitVo> pagination = ....
return PartialView("_Formations", pagination);
}
部分视图_Formations:
@Html.Grid(Model).Sort(ViewData["sort"] as GridSortOptions).Columns(col =>
{
col.For(p => Html.ActionLink(p.LongName, "EditFormation", "Stratigraphy", new { id = p.Id }, null).ToHtmlString()).Encode(false).Named(Locale.Name).SortColumnName("LongName");
col.For(p => p.FormCode).Named(Locale.Code);
col.For(p => p.ReferenceStratUnit.LongName).Named(Locale.ReferenceFormation);
}).Attributes(@class => "table table-condensed table-striped table-hover")
@if (Model.Count() > 0)
{
@Html.Raw(@Html.Pager(Model)));
}
其他动作和视图最像上面的示例(只是模型数据的差异)。 我的问题是:
我该如何解决?
谢谢!
答案 0 :(得分:4)
好吧,我刚刚解决了我的问题:
对于分页:为每个名为“type”的操作添加新参数,并根据参数进行验证。
public ActionResult Formations(GridSortOptions sort, int? page, string type, string filter = "all")
{
if (type != null && !type.Equals("Formation")) page = 1;
IPagination<StratUnitVo> pagination = ......
return PartialView("_Formations", pagination);
}
用于排序:对mvc grid使用ajax排序:
$(function () {
ajaxSort('pools', 'Stratigraphy', 'Pools');
ajaxSort('formations', 'Stratigraphy', 'Formations');
ajaxSort('zones', 'Stratigraphy', 'Zones');
});
function ajaxSort(tableId, controllerName, actionName) {
$(document).on('click', '#' + tableId + ' > table > thead > tr > th > a', (function () {
// store the href attribute, will get the column and direction parameter
var href = $(this).attr('href');
// mvc grid sort url is : 'http\\controllerName\\actionName?Column=columnname&Direction=[Ascending|Descending]
var temp = href.split('&');
// retrieve the column name
var column = temp[0].split('=')[1];
// retrieve sort direction
var direction = temp[1].split('=')[1];
// retrieve column header
var columnHeader = $(this).text();
// remove the href attribute, prevent postback
$(this).removeAttr('href');
// use ajax to sort
$.ajax({
url: '/' + controllerName + '/' + actionName,
data: { 'Column': column, 'Direction': direction },
dataType: 'html',
success: function (data) {
$('#' + tableId).html(data);
columnHeader = columnHeader.replace('\u25B2', '').replace('\u25BC', '');
// show up down arrow
// \u25B2 and \u+25BC is the unicode character for up/down triangle (arrow) to display in HTML
var column = $('#' + tableId + ' > table > thead > tr > th > a:contains(' + columnHeader + ')');
if(direction == 'Ascending')
column.text(columnHeader + "\u25B2");
else {
column.text(columnHeader + "\u25BC");
}
},
});
}));
}