asp.net-mvc - 自定义 Ajax 绑定(bind)无法正常工作

标签 asp.net-mvc asp.net-mvc-4 kendo-ui kendo-grid telerik-mvc

我有以下用于自定义 Ajax 绑定(bind)的代码。即使它显示第一页的数据,也存在以下问题。

request.Sorts 在 Orders_Read 方法中作为 NULL 出现

• Orders_Read 方法中 request.PageSize 的值为 0

request.Page 作为 1 传入 Orders_Read 方法(即使我单击页面 2)

此处需要进行哪些更改才能获得正确的排序和页面大小值?

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

查看

@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"))
 )
)
}

Controller

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; }
}
}

最佳答案

我遇到了和你一样的问题,经过几天的调查后终于找到了解决方案。如果其他人遇到同样的问题,我会将其发布在这里。

您需要从参数中删除前缀:

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

转换为:

public ActionResult Orders_Read([DataSourceRequest]DataSourceRequest request)

我不知道这是否是剑道的错误!但在这种情况下,无法通过定义的 Prefix 找到网格。

您可以找到一个示例 here

关于asp.net-mvc - 自定义 Ajax 绑定(bind)无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18064144/

相关文章:

asp.net - ASP.NET MVC 4 : NLog or NLog. Web 上的 NLog

javascript - 将 "id"传递给 Controller ​​并传递给 JavaScript

javascript - Razor MVC 使用模型数组填充 Javascript 数组

javascript - 使用 mvc 进行数据绑定(bind)的多 handle slider

asp.net-mvc - ASP.NET MVC 5、Knockout.js 和映射 : the right way?

c# - ASP.net MVC 将单元格内容作为 Grid.MVC 中的链接

c# - 警告 CA1001 工具 IDisposable 可忽略不计

c# - MVC4 Bundle 中的 {version} 通配符

javascript - 将自定义 CSS 类传递给 Kendo 的下拉小部件

kendo-ui - 初始化后更改小部件的项目模板