Как реализовать удаленную подкачку в инфраструктурной сетке ASP.net MVC? - PullRequest
1 голос
/ 23 июня 2019

Я читаю об удаленной страничке igGrid здесь: http://help.infragistics.com/NetAdvantage/jQuery/2013.1/CLR4.0?page=igGrid_Paging.html.

По ссылке выше написано:

"Если вы реализуете свою собственную удаленную службу (например, в ASP.NET или PHP), для правильной инициализации и рендеринга пейджера ваша служба должна указывать и responseDataKey (опция сетки), и recordCountKey (опция пейджинга) Элемент recordCountKey сообщает виджету «Пейджинг», сколько всего записей в бэкэнде. ResponseDataKey указывает, какое свойство в ответе содержит результирующие данные.

Я возвращаю свои данные в 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);


}
}

1 Ответ

1 голос
/ 25 июня 2019

Вам, вероятно, следует взглянуть и на эту тему:

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

Если вы хотите использовать [GridDataSourceAction], вам не следует форматировать ответ самостоятельно (эточто делает атрибут).Вместо этого, как говорит документ, вы должны возвращать представление как обычно с IQueryable данными.

Это может потребовать лучшего объяснения в Документе подкачки , но с помощью "укажите обаresponseDataKey (опция сетки) и recordCountKey (опция подкачки) "это означает, что вы должны установить:

соответствует возвращаемому формату объекта.

Это просто из-за того факта, что конечная точка, к которой Grid будет запрашивать данные, должна возвращать больше, чем простой массив.Например, если ваше MVC-действие возвращает:

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

Вы должны указать Grid, как интерпретировать этот объект.В этом случае было бы responseDataKey из items, чтобы сообщить Grid, где находятся данные текущей страницы, и recordCountKey из totalItems, чтобы сообщить Paging о наличии еще 1980 элементов, чтобы он мог построить пейджер.

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

В наших примерах также есть демонстрационная программа обработки удаленного пейджинга вручную , которая делает именно это.

...