2014-04-22 15 views
12

Tôi có lưới kendo như sau.Gửi tham số bổ sung trong Kendo Grid Đọc hành động

@(Html.Kendo().Grid<RevenueModel>() 
    .Name("WeeklyRevenue") 
    .Resizable(resizing => resizing.Columns(true)) 
    .Columns(columns => 
     { 
      columns.Bound(p => p.Number).Width(100); 
      columns.Bound(p => p.Type).Width(100); 
      columns.Bound(p => p.Week1).Format("{0:c}"); 
      columns.Bound(p => p.Week2).Format("{0:c}"); 
      columns.Bound(p => p.Week3).Format("{0:c}"); 
      columns.Bound(p => p.Week4).Format("{0:c}"); 
      columns.Bound(p => p.Week5).Format("{0:c}"); 
      columns.Bound(p => p.TotalRevenue).Format("{0:c}"); 
     }) 
    .Scrollable() 
    .Events(events => events.Change("onChange").DataBound("onDataBound")) 
    .DataSource(dataSource => dataSource.Ajax().Read(read => read.Action("WeeklyRevenue", "Home")).ServerOperation(false)) 
    .Pageable(pager => pager.Refresh(true)) 
) 

Đây là mã điều khiển của tôi

public ActionResult WeeklyRevenue([DataSourceRequest]DataSourceRequest request) 
     { 
      ... 
      DataSourceResult result = res.ToDataSourceResult(request); 
      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

Nó hoạt động tốt. Nhưng tôi muốn gửi dữ liệu bổ sung khi Grid đọc dữ liệu, giống như sau;

public ActionResult WeeklyRevenue([DataSourceRequest]DataSourceRequest request, string AdditionalParam) 

Tôi không thể tìm thấy giải pháp nào để thực hiện việc này. Cảm ơn trước.

Trả lời

18

Nếu dữ liệu bổ sung được biết đến tại server-side bạn nên sử dụng sự quá tải của các phương pháp hành động mà chấp nhận các giá trị đường:

.DataSource(dataSource => dataSource.Server() 
    .Read(read => read.Action("Read", "Home", 
     new { AdditionalParam = ViewData["AdditionalParam"] })) 
) 

Nếu dữ liệu bổ sung này được biết đến tại client-side duy nhất bạn nên sử dụng Phương thức Dữ liệu:

.DataSource(dataSource => dataSource.Ajax() 
    .Read(read => read 
     .Action("Read", "Home") 
     .Data("additionalData") 
) 
) 
<script> 
function additionalData() { 
    return { 
     AdditionalParam: $("#search").val() 
    }; 
} 
</script> 
13

Bạn có thể thử điều này;

.Read(read => read.Action("WeeklyRevenue", "Home", new { AdditionalParam = "Test" })) 

Hoặc thông qua chức năng JavaScript;

.Read(read => read.Action("Products_Read", "Grid").Data("additionalInfo")) 

function additionalInfo() { 
    return { 
     AdditionalParam : "test" 
    } 
} 

Hoặc toàn bộ JavaScript;

transport: { 
    read: { 
     url: "/Home/WeeklyRevenue", 
     type: "POST", 
     contentType: "application/json", 
     dataType: "json", 
     data: { 
     AdditionalParam : "Test" 
     } 
    } 
    } 

Nếu bạn sử dụng parameterMap chắc chắn rằng bạn stringify như sau:

parameterMap: function (data, operation) { 
        if (operation != "read") { 
         return kendo.stringify(data.models); 
        } 
        else if (operation === "read") { 
         return kendo.stringify(data); 
        } 
       } 

Trong điều khiển cái gì đó như

public ActionResult Products_Read([DataSourceRequest] DataSourceRequest request, string AdditionalParam) {...} 

tài liệu Hơn nữa điều này có thể được tìm thấy trong herehere.

+2

Cảm ơn Mahib, tùy chọn đầu tiên phù hợp với tôi. Tôi đã dành một thời gian dài tìm kiếm điều này trên trang Telerik và không thể tìm thấy ví dụ nào. Khi bạn sử dụng phương thức Data() trong treeview nó sẽ ghi đè tham số id mặc định, do đó bạn cần trả về giá trị này: [code] return {id: _curId, param1: _val1, param2: _val2} –

0

Trong trường hợp của tôi: Tôi có một văn bản đầu vào, và tôi muốn tải dữ liệu lưới của tôi với bộ lọc từ đầu vào văn bản của tôi, và lưới điện sẽ được tải dữ liệu khi tôi bấm btnSearch:

@(Html.Kendo().Grid<ARM.Models.UserViewModel>() 
       .Name("gridUsers") 
       .Columns(columns => 
       { 
        columns.Bound(c => c.Code); 
        columns.Bound(c => c.LanID); 
        columns.Bound(c => c.DepartmentName); 
        columns.Bound(c => c.UserRole); 
        columns.Bound(c => c.Level); 
       }) 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .Read(read => read.Action("GetUserSample", "ApprovalManager").Data("filterLanID")) 
        .PageSize(20) 
       ) 
      ) 

<script> 
function filterLanID() { 
     return { 
      lanid: $('#txtFilterUserId').val().trim() 
     }; 
    } 
function btnSearchOnClick(){ 
     $('#gridUsers').data("kendoGrid").dataSource.read(); 
} 
</script> 

Một bộ điều khiển :

public ActionResult GetUserSample([DataSourceRequest]DataSourceRequest request, string lanid) 
     { 
      IEnumerable<UserViewModel> userModel = GetListUser(lanid); 
      return Json(userModel.ToDataSourceResult(request)); 
     } 
2

Chúng tôi có thể sử dụng các tùy chọn được cung cấp bên dưới để chuyển các thông số bổ sung.

//object route values 
Read(read => read.Action("vs_Read", "vs", new{id=33}) 

//js function name 
Read(read => read.Action("vs_Read", "vs").Data("passAdParam") 

//By Template Delegate 
Read(read => read.Action("Aggregates_Read", "Grid").Data(@<text> 
      function() { 
       //pass parameters to the Read method 
       return { 
        name: "test", 
        id: $("#search").val() 
       } 
      } 
       </text>)) 
+0

không biết tại sao nhưng không có phương thức nào khác đã làm việc cho tôi ngoại trừ cái này. Tôi đã sử dụng hàm js giống như trong các câu trả lời khác nhưng đại biểu mẫu đã giải quyết nó –

Các vấn đề liên quan