2015-02-10 193 views
0

時,我有一個下拉列表劍道劍道DROPDOWNLIST不能調用操作方法如下爲什麼初始化

<%= Html.Kendo().DropDownList() 
     .Name("AssignDisciplineId") 
     .DataSource(dataSource => 
      { 
       dataSource.Read(read => 
       { 
        read.Action("DisciplinesBySportAjax","Shared").Data("onDisciplinesBySportData");       
       }); 
       }) 
     .Events(events => events  
       .Change("onAssignDisciplineComboChanged") 
       ) 
     .HtmlAttributes(new { style = "font-size:8pt;" }) 
%> 

function onDisciplinesBySportData(e) 
{ 
    var sportId = $('#AssignSportsId').data('kendoDropDownList').value(); 
    return { sportId: sportId } 
} 

[HttpPost] 
public ActionResult DisciplinesBySportAjax(string sportId) 
{ 
    var sports = this._sportBL.GetDisciplinesBySport(sportId); 

    return new JsonResult 
    { 
     Data = new SelectList(sports, "Id", "Description") 
    }; 
} 

但奇怪的是,它不datasource.read執行DisciplinesBySportAjax並沒有數據出現在DropDownList。當更改爲BindTo替換DataSource時,它工作正常,但我不知道如何在Jquery中動態地重新加載其內容。謝謝。

回答

1

只是因爲DropDownList不使用POST來獲取數據。刪除[HttpPost]或指定您想在DataSource的傳輸配置中使用POST。

我還沒有檢查你的方法是否正確完成,但這是它根本沒有被調用的原因。

+0

謝謝,DisciplinesBySportAjax在刪除[HttpPost]後執行。但是dropdownlist是空的。問題是什麼?返回jsonResult是否正確? – user585440 2015-02-11 07:04:30

+0

那麼你的代碼一般對我來說似乎有點奇怪。首先或所有,爲什麼你創建JsonResult?使用Json()方法。它處理你的東西,所以你不必擔心它們。其次,如果你不使用Post請求,你必須允許獲取JSON行爲。使用JSON方法應該有一個重載或在你的JsonResult。另外考慮不要返回一個SelectList。當你使用它時,你發送了一堆垃圾。最後,您可以在下拉列表中設置DataValueField和DataTextField,以確保它使用正確的字段。 – Pluc 2015-02-11 13:36:07

+0

這段代碼是來自Telerik MVC2的舊代碼。我已經更改爲Json(),但它仍然無法正常工作。請訪問http://stackoverflow.com/questions/28448824/why-kendo-dropdownlist-can-not-be-initialized-by-json-result-from-controller-act?noredirect=1#comment45236254_28448824。歡迎您提出任何意見。 – user585440 2015-02-11 22:46:10

0

嘗試如下更新操作:

[HttpPost] 
public ActionResult DisciplinesBySportAjax([DataSourceRequest] DataSourceRequest request, string sportId) 
{ 
    var sports = this._sportBL.GetDisciplinesBySport(sportId); 

    return new JsonResult 
    { 
     Data = new SelectList(sports, "Id", "Description") 
    }; 
} 

或者,如果你正在尋找級聯的下拉列表,那麼你可以使用子下拉列表BindTo和使用JS進行過濾該值取決於父級下拉值。