Kendo ui 如何获取剑道下拉列表的选定值

Kendo ui 如何获取剑道下拉列表的选定值,kendo-ui,kendo-dropdown,Kendo Ui,Kendo Dropdown,我不知道如何确定在我的剑道下拉列表中选择了哪个项目。我的视图将其模型定义为: @model KendoApp.Models.SelectorViewModel ViewModel定义为: public class SelectorViewModel { //I want to set this to the selected item in the view //And use it to set the initial item in the DropDownList

我不知道如何确定在我的剑道下拉列表中选择了哪个项目。我的视图将其模型定义为:

@model KendoApp.Models.SelectorViewModel
ViewModel定义为:

public class SelectorViewModel
{
    //I want to set this to the selected item in the view
    //And use it to set the initial item in the DropDownList
    public int EncSelected { get; set; }

    //contains the list if items for the DropDownList
    //SelectionTypes contains an ID and Description
    public IEnumerable<SelectionTypes> ENCTypes
}

此DropDownList包含我期望的值,但当用户单击submit按钮时,我需要将所选值传递回控制器。一切正常,但我无法访问从控制器的[HttpPost]操作中选择的项目。那么,如何将DropDownList的值分配给隐藏的表单字段,以便控制器可以使用它呢?

也许您应该使用剑道DropDownList的DropDownListFor结构,就像在您的视图中那样:

@(Html.Kendo().DropDownListFor(m => m.EncSelected)
                    .Name("EncounterTypes")
                    .DataTextField("Description")
                    .DataValueField("ID")
                    .BindTo(Model.ENCTypes)
                    .SelectedIndex(Model.EncSelected)
                )
这样,当您提交时,它将在POST请求中可用,并且您不需要在任何地方放置隐藏字段

但是,如果出于某种原因需要使用隐藏字段,请将其放在下拉列表中,并使用JQuery放置,例如,将所选项目放置在隐藏字段中

这是你的选择:


当从下拉列表中选择一个值时,在selec事件中,我们可以得到如下所示的所选值:

@(Html.Kendo().DropDownList()
              .Name("booksDropDown")
              .HtmlAttributes(new { style = "width:37%" })
              .DataTextField("BookName")
              .DataValueField("BookId")
              .Events(x => x.Select("onSelectBookValue"))
              .DataSource(datasource => datasource.Read(action => action.Action("ReadBookDropDow", "PlanningBook").Type(HttpVerbs.Get)))
              .OptionLabel("Select"))
   function onSelectBookValue(e) {    

                    var dataItem = this.dataItem(e.item.index());
                    var bookId = dataItem.BookId;
                 //other user code
    }
javascript函数如下所示

@(Html.Kendo().DropDownList()
              .Name("booksDropDown")
              .HtmlAttributes(new { style = "width:37%" })
              .DataTextField("BookName")
              .DataValueField("BookId")
              .Events(x => x.Select("onSelectBookValue"))
              .DataSource(datasource => datasource.Read(action => action.Action("ReadBookDropDow", "PlanningBook").Type(HttpVerbs.Get)))
              .OptionLabel("Select"))
   function onSelectBookValue(e) {    

                    var dataItem = this.dataItem(e.item.index());
                    var bookId = dataItem.BookId;
                 //other user code
    }
我相信这会有帮助


感谢所有发现此问题的人,他们想知道如何在JavaScript中获取所选值,以下是正确答案:

$("#EncounterTypes").data("kendoDropDownList").value();

从文档中:

你好,我刚刚解决了这个问题,持续搜索了2个小时,找到了自己的解决方案

因此,这里是获取剑道下拉列表中的任何数据的行

$("#customers").data("kendoDropDownList").dataSource._data[$("#customers").data("kendoDropDownList").selectedIndex].colour;

只需将id customers更改为您提供给剑道下拉列表的id。

如果您还想读取下拉列表的文本,可以使用以下剑道函数获取或设置值:

$("#customers").data("kendoDropDownList").dataSource._data[$("#customers").data("kendoDropDownList").selectedIndex].colour;
$('#EncounterTypes').data("kendoDropDownList").text();
使用@Vivek Parekh提到的这个.val将不起作用-剑道框架中没有函数.val


如果需要,您可以使用jQuery并返回值:$'EncounterTypes'。val

您可以像下面的代码一样获取所选项目,然后使用item.property获取更多信息

var selectedFooType = $("#fooType").data("kendoDropDownList").dataItem();
    selectedFooType.name 
//OR
    selectedFooType.id

如果可以,我会投反对票,但原因可能是POST请求将包含DataTextField提供的值,而不是DataValueField。实际上,这是不对的。如果使用的是绑定到模型的dropdownlist for,则post请求将包含dropdownlist绑定到的模型属性中包含的dropdownlist选定值。您可以在下面看到这一点,并使用类似Fiddler的内容查看请求。不确定为什么有人对此进行了否决。。。很高兴能得到一些关于否决票的理由^在简历中:$myListID.datakendoDropDownList.value;恐怕这不应该被否决。调用.kendoDropDownList实际上会重新初始化该控件,在我的例子中,我正在进行AJAX绑定,从中删除了所有数据。我发布了一个答案,在任何情况下都应该有效。布莱恩-谢谢你的回复。使用value方法访问值是正确的。但是,在本例中,我需要访问控制器中的值,而不是视图。我发布这个问题已经两年了。所以,我是凭记忆来判断的,这方面我做得不好。但是我很确定使用DropDownListFor会将值传递回我的控制器。我看到了,只是我在这里多次试图记住如何用JavaScript实现它,所以我决定把答案放在这里。这对我不起作用,我得到[obj,obj]作为价值。@luisluix对我有效,它是文档中的内容-不确定要告诉你什么。:/你确定你没有使用val或其他什么吗?这在IE11中似乎对我不起作用。如果你这样做,你需要从所选索引中减去一个,因为索引将比数组位置多1个示例:$customers.datakendoDropDownList.selectedIndex-1正好是我需要的!谢谢