2014-04-22 9 views
12

मेरे पास एक केंडो ग्रिड है।केंडो ग्रिड में अतिरिक्त पैरामीटर भेजें एक्शन

@(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)) 
) 

यहाँ मेरी नियंत्रक कोड

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

यह ठीक काम करता है है। लेकिन जब ग्रिड डेटा पढ़ता है, तो मैं कुछ अतिरिक्त डेटा भेजना चाहता हूं;

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

मुझे यह समाधान करने का कोई समाधान नहीं मिला। अग्रिम में धन्यवाद।

उत्तर

18

अतिरिक्त डेटा सर्वर साइड पर जाना जाता है, तो आप कार्रवाई विधि है जो मार्ग मान स्वीकार की अधिभार का उपयोग करना चाहिए:

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

इस अतिरिक्त डेटा क्लाइंट साइड पर जाना जाता है, तो केवल आप का उपयोग करना चाहिए डेटा विधि:

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

आप इसे आजमा सकते हैं;

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

या जावास्क्रिप्ट फ़ंक्शन के माध्यम से;

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

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

या पूर्ण जावास्क्रिप्ट;

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

आप parameterMap का उपयोग करते हैं कि आपके पास निम्न की तरह stringify बनाने:

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

नियंत्रक कुछ में इस

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

आगे प्रलेखन here और here में पाया जा सकता है।

+2

धन्यवाद महिब, पहला विकल्प मेरे लिए काम करता था। मैंने टेलरिक साइट पर इसकी खोज करने में काफी समय लगाया और कोई उदाहरण नहीं मिला। जब आप वृक्षदृश्य में डेटा() विधि का उपयोग करते हैं तो यह डिफ़ॉल्ट आईडी पैरामीटर को ओवरराइड करता है, इसलिए आपको इसे वापस करने की आवश्यकता होती है: [कोड] वापसी {id: _curId, param1: _val1, param2: _val2} –

0

मेरे मामले में: मैं एक इनपुट प्रकार पाठ है, और मैं अपने पाठ इनपुट से फिल्टर के साथ अपने ग्रिड लोड डेटा चाहते हैं, और ग्रिड डेटा लोड होगा जब मैं 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> 

एक नियंत्रक :

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

हम अतिरिक्त पैरामीटर पास करने के लिए नीचे दिए गए विकल्पों का उपयोग कर सकते हैं।

//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

पता नहीं क्यों लेकिन कोई अन्य विधि नहीं इस के अलावा मेरे लिए काम किया। मैंने अन्य उत्तरों में एक जेएस फ़ंक्शन का उपयोग किया लेकिन टेम्पलेट प्रतिनिधि ने इसे हल किया –

संबंधित मुद्दे