如何在基础设施 ASP.net MVC网格中实现远程寻呼?



我在这里阅读有关igGrid远程分页的信息:http://help.infragistics.com/NetAdvantage/jQuery/2013.1/CLR4.0?page=igGrid_Paging.html。

根据上面的链接,它说:

"如果你正在实现自己的远程服务(例如在 ASP.NET 或PHP中),为了正确初始化和呈现寻呼机,你的服务必须同时指定responseDataKey(网格选项)和recordCountKey(分页选项)。记录计数键成员告诉分页小组件后端总共有多少条记录。响应数据键指定响应中的哪个属性包含结果数据。

我正在响应数据键和记录计数键中返回我的数据,但它对我不起作用。我已经尝试从我的操作中删除[GridDataSourceAction]属性。

CSHTML :

@( Html.Infragistics().Grid<Searchclient>()
.ID("igGrid1")
.Width("auto")
.EnableHoverStyles(false)
// Enable continuous virtualization
.PrimaryKey("PartyId1")
.Columns(column =>
{
column.For(x => x.FullName).DataType("string").HeaderText("Full Name").Template("<div style='min-width:100px'>${FullName}</div> ");
column.For(x => x.CompanyName).DataType("string").HeaderText("Company Name").Template("<div style='min-width:150px'>${CompanyName}</div> ").Hidden(true);
column.For(x => x.FirstName1).DataType("string").HeaderText("FirstName1").Template("<div style='min-width:130px'>${FirstName1}</div> ").Hidden(true);
column.For(x => x.LastName1).DataType("string").HeaderText("Last Name1").Template("<div style='min-width:130px'>${LastName1}</div> ").Hidden(true);
column.For(x => x.Firstname2).DataType("string").HeaderText("First Name2").Hidden(true);
column.For(x => x.Lastname2).DataType("string").HeaderText("Last Name2").Hidden(true);
column.For(x => x.StreetNo).DataType("string").HeaderText("Street No").Template("<div style='min-width:100px'>${StreetNo}</div> ").Hidden(true);
column.For(x => x.Street).DataType("string").HeaderText("Street").Template("<div style='min-width:100px'>${Street}</div> ").Hidden(true);
column.For(x => x.Address).DataType("string").HeaderText("Address").Template("<div style='min-width:100px'>${Address}</div> ");
column.For(x => x.City).DataType("string").HeaderText("City").Template("<div style='min-width:80px'>${City}</div> ");
column.For(x => x.State).DataType("string").HeaderText("State").Template("<div style='min-width:80px'>${State}</div> ");
column.For(x => x.Zipcode).DataType("string").HeaderText("Zipcode").Template("<div style='min-width:100px'>${Zipcode}</div> ");
column.For(x => x.CustomerNumber).DataType("string").HeaderText("Customer Number").Hidden(true);
column.For(x => x.AccountNumber).DataType("string").HeaderText("Account Number").Template("<div style='min-width:120px'>${AccountNumber}</div> ");
column.For(x => x.Email1).DataType("string").HeaderText("Email1").Template("<div style='min-width:100px'>${Email1}</div> ");
column.For(x => x.Email2).DataType("string").HeaderText("Email2").Template("<div style='min-width:100px'>${Email2}</div> ");
column.For(x => x.Email3).DataType("string").HeaderText("Email3").Hidden(true);
column.For(x => x.Email4).DataType("string").HeaderText("Email4").Hidden(true);
column.For(x => x.PartyId1).HeaderText("PartyId").DataType("int").Hidden(true);
})
.Features(features =>
{
features.Responsive().ForceResponsiveGridWidth(false).EnableVerticalRendering(false).ColumnSettings(setting =>
{
setting.ColumnSetting().ColumnKey("FullName").Classes("ui-visible-phone ui-visible-tablet ui-visible-desktop").Configuration(conf => conf.AddColumnModeConfiguration("phone", c => c.Template("<span>${FullName}</span>")));
setting.ColumnSetting().ColumnKey("telpremise").Classes("ui-hidden-phone");
setting.ColumnSetting().ColumnKey("firstname1").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("telcell").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("street").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("address").Classes("ui-hidden-phone");
setting.ColumnSetting().ColumnKey("lastname1").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("email1").Classes("ui-hidden-phone");
setting.ColumnSetting().ColumnKey("address").Classes("ui-hidden-phone");
setting.ColumnSetting().ColumnKey("zipcode").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("accountnumber").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("email2").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("city").Classes("ui-visible-desktop");
setting.ColumnSetting().ColumnKey("state").Classes("ui-hidden-phone");
setting.ColumnSetting().ColumnKey("PartyId1").Classes("ui-hidden-phone");
});
features.Hiding().HiddenColumnIndicatorHeaderWidth(14).ColumnSettings(s => s.ColumnSetting().ColumnKey("CompanyName").AllowHiding(true));
features.Resizing().AllowDoubleClickToResize(true).DeferredResizing(true);
features.Paging().Type(OpType.Remote).PageSize(10).PrevPageLabelText("Prev").NextPageLabelText("Next");
features.Sorting().Type(OpType.Local).Mode(SortingMode.Single).ColumnSettings(settings =>
{
settings.ColumnSetting().ColumnKey("PartyId").AllowSorting(true);
});
features.RowSelectors().EnableCheckBoxes(true).EnableRowNumbering(false);
features.Selection().MouseDragSelect(false).MultipleSelection(false).Mode(SelectionMode.Row);
features.Filtering().Mode(FilterMode.Simple);
features.Sorting().Type(OpType.Remote);
})
.DataSourceUrl(Url.Action("GetAccountList"))
.Width("auto")
.DataBind()
.Render()
)

.CS:

// [GridDataSourceAction]
public ActionResult GetAccountList(int page, int pageSize)
{
if (Session["Condition"] != null)
{
string condition = (string)Session["Condition"];
var searchlist = DBmain.GetSearchClientPaging(condition, page, pageSize, out TotalRecordsCount);
return Json(new
{
responseDataKey = searchlist,
recordCountKey = TotalRecordsCount
}, JsonRequestBehavior.AllowGet);

}
}

您可能还应该看看这个主题:

https://www.igniteui.com/help/handling-remote-features-manually

如果要使用该[GridDataSourceAction]则不应自己格式化响应(这就是该属性的作用)。相反,正如文档所说,您应该像往常一样使用IQueryable数据返回视图。

这可能需要在分页文档中有更好的解释,但是通过"同时指定响应数据键(网格选项)和记录计数键(分页选项)",这意味着您应该设置:

  • 响应数据键 (.网格本身的 ResponseDataKey() ASP.NET MVC) 选项
  • 记录计数键 (.分页功能上的 ASP.NET MVC) 中的 RecordCountKey()

匹配返回的对象格式。

这仅仅是因为 Grid 将查询数据的端点应该返回的不仅仅是一个简单的数组。例如,如果 MVC 操作返回:

{
items: [1..20],
totalItems: 2000
}

您需要告诉网格如何解释该对象。在这种情况下,告诉网格当前页面数据的位置是responseDataKeyitemsrecordCountKeytotalItems让分页知道还有 1980 个项目,以便它可以构建寻呼机。

@( Html.Infragistics().Grid<Searchclient>()
.ResponseDataKey("items")
// ..
.Features(features =>
features.Paging().Type(OpType.Remote).RecordCountKey("totalItems")
// ...

在我们的示例中,还有一个手动处理远程分页的演示可以做到这一点。

最新更新