Kendo Mvc DropdownList,如何设置初始值

时间:2013-12-03 08:37:43

标签: c# telerik kendo-ui kendo-asp.net-mvc

我正在使用带有ajax绑定的Kendo DropdownList。

使用这些代码,我无法设置来自model的初始值。只需在列表中填入项目并选择第一项。

 @(Html.Kendo().DropDownList()
 .Name("NATIONALITY") 
 .DataTextField("DESCRIPTION").HtmlAttributes(new { style = "width:220px" }) 
 .DataValueField("REFERENCEID")
 .Value(Model.NATIONALITY)
         //Placeholder("SELECT")
  .DataSource(source =>
                        {
  source.Read(read =>
             {
        read.Action("GetDefinitionDetails", "Definition", new { definitionCode = "NATIONALITY", addEmptyRow = false });
                            }).ServerFiltering(true);
                            }).ServerFiltering(true);
                        }))

但当我将Html.Kendo()。DropDownList()更改为Html.Kendo()。Combobox()时,它还会填充列表并按预期设置初始值(这是通过模型传递的值。)< / p>

4 个答案:

答案 0 :(得分:6)

使用最新版本(可能适用于早期版本)构建KendoUI,可以在下拉列表中设置初始Text值:

   ....
   .Value(Model.DOCTORCODE.ToString()) //DOCTORCODE is  guid type
   .Text(Model.DOCTOR)  //DOCTOR is string type.This is optional.It should be works without .Text property

答案 1 :(得分:3)

Kendo DropDownList上,您可以指定SelectedIndex,如下所示:

@(Html.Kendo().DropDownList().SelectedIndex(myIndex)
 .//other builder stuff

使用DropDownList,您只能指定要选择的项目的索引。您无法通过其文本选择此项目。

使用客户端API,您可以使用the value method根据文本设置设置选定值。只需添加一个调用JavaScript函数的e vent on the data bound即可。然后,此功能可以根据文本选择所需的项目。

答案 2 :(得分:0)

对我来说有用的是将下拉列表框命名为与模型中的属性相同:

View model (adminUserViewModel.cs)

//....other properties....
[Display(Name = "Security Level")]
[UIHint("SecurityLevelsEditor")]
public SecurityLevelViewModel securityLevel { get; set; }

in my /Views/Shared folder I have a custom template named:

 SecurityLevelsEditor.cshtml 

@model WebAdmin.Models.SecurityLevelViewModel
@(Html.Kendo().DropDownList().Name("securityLevel")
.DataTextField("levelDescription")
.DataValueField("securityLevelID")
.DataSource(datasource => datasource.Read(source => source.Action("Index", "SecurityLevels"))
)

以下是它在index.cshtml文件中的连接方式:

@model IEnumerable<WebAdmin.Models.AdminUserViewModel>

@(Html.Kendo().Grid(Model).Name("adminUsersGrid")
    .Columns(columns =>{
    columns.Bound(item => item.userName);
    columns.Bound(item => item.securityLevel).ClientTemplate("#: securityLevel.levelDescription #" );    
    columns.Bound(item => item.firstName);
    columns.Bound(item => item.lastName);
    columns.Bound(item => item.email);
    columns.Command(command => { command.Edit(); command.Destroy(); });
})
    .DataSource(dataSource => dataSource
        .Ajax()
        .Model(m => {
            m.Id(p => p.userID);
            m.Field(item => item.securityLevel).DefaultValue(ViewData["defaultSecurityLevel"] as WebAdmin.Models.SecurityLevelViewModel);
        })
        .Update(u => u.Action("Update", "UserAdmin"))
        .Create(c => c.Action("_Create", "UserAdmin"))
        .Destroy(x => x.Action("_Destroy", "UserAdmin"))
        .Read(read => read.Action("clientIndex", "UserAdmin", new { id = @ViewBag.accountID }))
     )
    .Pageable().Sortable().Filterable()
    .ToolBar(toolbar => toolbar.Create())
    .Editable(e => e.Mode(GridEditMode.PopUp).TemplateName("AdminUserPopup"))

)

答案 3 :(得分:0)

如果下拉列表位于模板中,请使用.HtmlAttributes设置初始值。

@(Html.Kendo()
    .DropDownList()
    .Name("barDropdown")
    .DataTextField("Text")
    .DataValueField("Value")
    .DataSource(ds => ds
        .Read(read => read.Action("getBar", "SomeController").Type(HttpVerbs.Post)))
    .HtmlAttributes(new { value = "#:BarValue#" })
    .ToClientTemplate()
    )