2015-08-19 4 views
0

У меня есть общий метод получения данных для гридов в моем приложении, этот метод получает данные из API и затем возвращает предопределенную сетку, заполненную указанными данными. Моя проблема в том, что пейджинг не будет работать, т. Е. Ничего не произойдет - когда я использовал этот метод.Webgrid paging через общий метод контроллера.

Я думал, что это может быть ссылка на URL-адрес, на который ссылается пейджинговая ссылка - т. Е. Общий метод - не зная, что другие данные должны быть отправлены.

Как я могу получить привязку моей веб-страницы для этого общего метода?

Общий метод

/// <summary>Generic grid request method. Used to render any grid with data from a defined location.</summary> 
    /// <param name="obj">The data required to complete the operation.</param> 
    /// <param name="obj[dataurl]">The URL to be used to get the data for the grid.</param> 
    /// <param name="obj[data]">Any data that needs to be sent to the data source when getting the data for the grid.</param> 
    /// <param name="obj[gridurl]">The URL for the grid to be rendered.</param> 
    /// <returns>The grid populated with data in HTML format.</returns> 
    [HandleError] 
    [HttpPost] 
    public ActionResult GridRequest(string obj) 
    {    
     JObject Request; 
     string DataUrl, GridUrl, RequestData; 
     try 
     { 
      Request = JObject.Parse(obj); 
      DataUrl = (string)Request["dataurl"]; 
      RequestData = Request["data"] != null ? Request["data"].ToString() : null; 
      GridUrl = (string)Request["gridurl"]; 

      HttpClient client = new HttpClient(); 
      client.Request.ForceBasicAuth = true; 
      client.Request.SetBasicAuthentication(C4SMVCApp.Properties.Settings.Default.APIUsername, C4SMVCApp.Properties.Settings.Default.APIPassword); 
      HttpResponse response = client.Post(DataUrl, RequestData, HttpContentTypes.ApplicationJson); 
      string result = response.RawText; 

      if (response.StatusCode != HttpStatusCode.OK) 
      { 
       throw new Exception("Grid Request Error" + result); 
      } 
      else 
      { 
       JArray data = JArray.Parse(result); 
       return PartialView(GridUrl, data); 
      } 
     } 
     catch (Exception) 
     {     
      throw; 
     } 
    } 

Ajax вызова

  $.ajax({ 
       type: "post", 
       url: "/C4S/Home/GridRequest", 
       data: { 
        obj: JSON.stringify({ 
         dataurl: "{0}Community/AANewsApi/AddToList".format(apiBaseUrl), 
         data: new Object({ listId: listId, items: selectedResult }), 
         gridurl: "~/Areas/Comms/Views/Home/Grids/ListPeopleGrid.cshtml" 
        }) 
       } 
      }).done(function (data) { 
       $('#persongrid').replaceWith(data); 
       $('#addusercontainer').addClass('hidden'); 
       listGrid(); 
      }).fail(failCallback); 

WebGrid

@model IEnumerable<object> 
@{ 
    WebGrid ListPeopleGrid = new WebGrid(
    source: Model, 
    ajaxUpdateContainerId: "persongrid", 
    canPage: true, 
    rowsPerPage: 16); 
} 
<div id="persongrid"> 
@ListPeopleGrid.GetHtml(
    tableStyle: "webgrid", 
    headerStyle: "webgrid-header color-2", 
    footerStyle: "webgrid-footer color-2", 
    rowStyle: "webgrid-row", 
    alternatingRowStyle: "webgrid-row", 
    fillEmptyRows: true, 
    nextText: "Next >", 
    previousText: "< Prev", 
    columns: ListPeopleGrid.Columns(
    ListPeopleGrid.Column("Id", style: "hidden"), 
    ListPeopleGrid.Column("Name"), 
    ListPeopleGrid.Column("Manager"), 
    ListPeopleGrid.Column("AccessLevel"), 
    ListPeopleGrid.Column("Site"), 
    ListPeopleGrid.Column("Department") 
)) 
</div> 

ответ

0

Я нашел ответ на этот час ere: WebGrid pagination loose parameters with POST data

Мне просто нужно было поймать событие и добавить ?page=[pageNo] к URL-адресу и включить данные сообщения в свойство ajax-вызова data:.

+0

Спасибо, это то, что я искал. –

Смежные вопросы