2013-08-05 49 views
2

我有自定義Ajax綁定的以下代碼。即使它正在顯示第一頁的數據,也會出現以下問題。自定義Ajax綁定無法正常工作

•的request.Sorts即將爲NULL到Orders_Read方法

•的request.PageSize即將爲0到Orders_Read方法

•的request.Page即將爲1到Orders_Read方法(即使我點擊頁面2)

需要做什麼修改才能獲得正確的排序和頁面大小值?

注意:我正在使用MVC Wrapper作爲Kendo Grid。

VIEW

@Scripts.Render("~/bundles/jquery") 

<script type ="text/javascript">  
$(document).ready(function(){ 
    $('#Submit1').click(function() { 
     alert('1'); 
     $('#grid12').data('kendoGrid').dataSource.read(); 
    }); 
}); 
</script> 
@model KendoPratapSampleMVCApp.Models.Sample 
@{ 
ViewBag.Title = "CustomAjaxbind"; 
} 

<h2>CustomAjaxbind</h2> 
@using (Html.BeginForm("PostValues", "CustomAjaxBinding", FormMethod.Post)) 
{ 

<input id="Submit1" type="button" value="SubmitValue" /> 
@(Html.Kendo().Grid<KendoPratapSampleMVCApp.Models.Sample>()  
.Name("grid12") 
.EnableCustomBinding(true) 
.Columns(columns => { 
    columns.Bound(p => p.SampleDescription).Filterable(false).Width(100); 
    columns.Bound(p => p.SampleCode).Filterable(false).Width(100); 
    columns.Bound(p => p.SampleItems).Filterable(false).Width(100); 
}) 
.Pageable() 
.Sortable() 
.Scrollable() 
.AutoBind(false) 
.Filterable() 
.HtmlAttributes(new { style = "height:430px;" }) 
.DataSource(dataSource => dataSource 
    .Ajax() 
    .PageSize(2) 
    .Read(read => read.Action("Orders_Read", "CustomAjaxBinding")) 
) 
) 
} 

控制器

public class CustomAjaxBindingController : Controller 
{ 
    // 
    // GET: /CustomAjaxBinding/ 

    public ActionResult Index() 
    { 
     return View("CustomAjaxbind"); 
    } 

    public ActionResult Orders_Read([DataSourceRequest(Prefix = "grid12")]DataSourceRequest request) 
    { 

     string sortField = "SampleDescription"; 
     string sortDirection = string.Empty; 

     if (request.Sorts != null) 
     { 
      foreach (SortDescriptor sortDescriptor in request.Sorts) 
      { 
       sortField = sortDescriptor.Member; 
       if (sortDescriptor.SortDirection == ListSortDirection.Ascending) 
       { 
        sortDirection = "Ascending"; 
       } 
       else 
       { 
        sortDirection = "Descending"; 
       } 
      } 
     } 

     int total = 1; 
     int myPageSize = 2; 
     if(request.PageSize !=0) 
     { 
      myPageSize = request.PageSize; 
     } 

     IEnumerable<Sample> currentSamples = GetSubsetEmployees(request.Page - 1, myPageSize, out total, sortField, sortDirection); 

     var result = new DataSourceResult() 
     { 
      Data = currentSamples, 
      Total = total // Total number of records 
     }; 

     return Json(result); 
    } 

    public IEnumerable<Sample> GetSubsetEmployees(int pageIndex, int pageSize, out int itemCount, string sortField, string sortDirection) 
    { 

     IEnumerable<Sample> samples = GetSamples(); 
     itemCount = samples.ToList().Count; 

     var selector = new Func<Sample, object>(e => e.GetType().GetProperty(sortField).GetValue(e, null)); 
     var query = sortDirection.Equals("descending", StringComparison.OrdinalIgnoreCase) 
         ? samples.OrderByDescending(selector) 
         : samples.OrderBy(selector); 

     List<Sample> currentPageEmployees = query 
      .Skip(pageIndex * pageSize) 
      .Take(pageSize) 
      .ToList(); 

     return currentPageEmployees; 

    } 

    public static IEnumerable<Sample> GetSamples() 
    { 
     List<Sample> sampleAdd = new List<Sample>(); 
     Sample s12 = new Sample(); 
     s12.SampleCode = "1"; 
     s12.SampleDescription = "A"; 
     s12.SampleItems = "newone"; 

     Sample s2 = new Sample(); 
     s2.SampleCode = "2"; 
     s2.SampleDescription = "B"; 
     s2.SampleItems = "oldone"; 

     Sample s3 = new Sample(); 
     s3.SampleCode = "3"; 
     s3.SampleDescription = "C"; 
     s3.SampleItems = "latestone"; 

     Sample s4 = new Sample(); 
     s4.SampleCode = "4"; 
     s4.SampleDescription = "D"; 
     s4.SampleItems = "latestoneitem"; 

     sampleAdd.Add(s12); 
     sampleAdd.Add(s2); 
     sampleAdd.Add(s3); 
     sampleAdd.Add(s4); 
     return sampleAdd; 
    } 


    } 

型號

namespace KendoUIMvcSample.Models 
{ 
public class SampleModel 
{ 
    public List<Sample> samples; 
} 
public class Sample 
{ 
    public string SampleDescription { get; set; } 
    public string SampleCode { get; set; } 
    public string SampleItems { get; set; } 
} 
} 
+0

我不知道,你儘量不要使用'.EnableCustomBinding(真)'? – Ashkan

回答

2

我有同樣的問題,因爲你和國際泳聯lly最近在調查問題後花費了很多時間才找到解決方案。如果有人遇到同樣的問題,我會在這裏發佈。

您需要從參數中刪除前綴

public ActionResult Orders_Read([DataSourceRequest(Prefix = "grid12")]DataSourceRequest request) 

轉換爲:

public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request) 

我不知道這是一個錯誤的劍道還是不行!但在這種情況下,網格無法通過定義的前綴找到。

你可以找到一個例子here