Kendo UI(MVC)Grid AJAX绑定表单数据未发送

时间:2014-02-06 18:43:32

标签: kendo-ui kendo-grid kendo-asp.net-mvc

有谁知道Grid Ajax Read流畅API的“数据”部分是什么。

我问的原因是因为我的设置是这样的:

// razor setup
.Kendo()
.Grid<MyModel>()
.Name("KENDO_UI_GRID")
.DataSource(d =>
    d.Ajax()
    .Read(r => r
        .Data("k_get_datafromform")
        .Action("ResultsJson", "ControllerName")
    )
    .Events(e => e.RequestEnd("k_grid_requestend"))
    .Events(e => e.Error("k_grid_error"))
    .PageSize(Model.MaxItemsPerPage))
.Columns(// etc etc


// javascript function  
function k_get_datafromform() {
    var theFormFound = jQuery(".search-form:first");
    if (theFormFound) {     
        // custom helper to convert form to object
        return theFormFound.serializeObject();
    };
    return null;

}

但是当网格POST获取结果时,它不会随之发送数据。表单集合包含通常的剑道内容(页面大小等),但没有别的。我做错了什么???

3 个答案:

答案 0 :(得分:2)

来自Telerik:

&#34; 这是已修复的第一个Service Pack发行版(2013.3.1316)中的已知问题。读取请求的附加数据未包含在序列化请求数据中,也未发送到服务器。请将您使用的版本更新到可从您的帐户下载的最新Service Pack(2013.3.1324)。对由此造成的不便表示歉心。&#34;

就是这样。

答案 1 :(得分:1)

当dataSource正在执行操作时,您正在使用Data函数向服务器发送addtional参数 - 在您的情况下是Read操作。

所以如果你从函数返回类似{foo:42}的东西。此参数等于42将发送到服务器。

在你的情况下,我假设serializeObject的结果不正确。

您可以尝试查看对象的外观并与我们分享吗?

您可以使用

alert(kendo.stringify(theFormFound.serializeObject()));

console.log(kendo.stringify(theFormFound.serializeObject())

进行调查

答案 2 :(得分:-1)

例如,这里有一个需要additionalData的DropdownList(左边的东西更清楚),你会注意到.data标签中的javascript函数“OnAdditionalData”

@(Html.Kendo().DropDownListFor(x => x.FromOpportunity)
          .Name("OpportunityDDL")                                                    
          .DataSource(source => {
              source.Read(read =>
               {
                   read.Action("SomeMethod", "SomeController")
                      .Data("OnAdditionalData");
               })                   
   )     

和JS

 function OnAdditionalData() {
    var Item = 3      
    return {             
        partyItem: Item
    };
}

因此,当数据被读取时,它说好了,转到SomeController中的SomeMethod并读取数据,但是说等等!我需要数据,我带给派对的是什么。它查看了JS函数并说好了我有一个值为3的partyItem。

public JsonResult SomeMethod(int partyItem)
    {
       // partyItem will == 3
    }     

注意控制器中的“partyItem”与函数中的“partyItem”同名,它们必须相同。请注意,如果您期望Controller中的字符串,它将无法工作。如果它是var Item = "3"那么它会起作用。