Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kendo ui 为什么Kendo DropDownlist在初始化时不能调用action方法_Kendo Ui_Kendo Dropdown - Fatal编程技术网

Kendo ui 为什么Kendo DropDownlist在初始化时不能调用action方法

Kendo ui 为什么Kendo DropDownlist在初始化时不能调用action方法,kendo-ui,kendo-dropdown,Kendo Ui,Kendo Dropdown,我有一个剑道下拉列表如下 <%= Html.Kendo().DropDownList() .Name("AssignDisciplineId") .DataSource(dataSource => { dataSource.Read(read => { read.Action("DisciplinesBySport

我有一个剑道下拉列表如下

<%= 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(Read=>
{  
read.Action(“规程ByPortaJAX”,“共享”).Data(“OnDisciplinesByPortData”);
});
})
.Events(Events=>Events
.Change(“OnAssignDiscipliceComboChanged”)
)
.HtmlAttributes(新的{style=“font size:8pt;”})
%>
函数OnDisciplinesByPortData(e)
{
var sportId=$('#assignsportId').data('kendoDropDownList').value();
返回{sportId:sportId}
}
[HttpPost]
公共操作结果规程ByPortaJAX(字符串sportId)
{
var sports=此项。_sportBL.getStructuresBySport(sportId);
返回新的JsonResult
{
数据=新的选择列表(运动、“Id”、“说明”)
};
}

但奇怪的是,它没有在datasource.read中执行portaljax规则,DropDownList中也没有显示任何数据。当更改为BindTo替换DataSource时,它工作得很好,但我不知道如何在Jquery中动态地重新加载它的内容。谢谢

尝试更新您的操作,如下所示:


或者,如果您正在寻找级联下拉列表,那么您可以使用子下拉列表上的BindTo,并使用JS根据父下拉列表值筛选值。

原因很简单,因为DropDownList不使用POST来获取数据。删除
[HttpPost]
或在数据源的传输配置中指定要使用POST


我还没有检查您的方法是否正确执行,但这就是根本没有调用它的原因。

谢谢,删除[HttpPost]后会执行StriplesByPortaJAX。但是dropdownlist是空的。有什么问题?返回的jsonResult正确吗?您的代码是通用的,我觉得有点奇怪。首先,为什么要创建JsonResult?使用Json()方法。它为你处理事情,所以你不必担心它们。第二,如果不使用Post请求,则必须允许Get-in-yout Json行为。对于JSON方法,JsonResult中应该有一个重载。同时考虑不要返回一个选择列表。当你使用它时,你发送了一堆垃圾。最后,您可以在dropdownlist上设置DataValueField和DataTextField,以确保它使用了正确的字段。我已经改为Json(),但它仍然不起作用。请去。欢迎你的任何意见。
 [HttpPost]
 public ActionResult DisciplinesBySportAjax([DataSourceRequest] DataSourceRequest request, string sportId) 
 {
     var sports = this._sportBL.GetDisciplinesBySport(sportId);

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