2013-12-03 2 views
2

Я использую Kendo DropdownList с привязкой ajax.Kendo Mvc DropdownList, Как установить начальное значение

С этими кодами я не могу установить значение, исходящее из модели. Он просто заполняет список элементами и выбирает первый элемент.

@(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(). Выпадающий() также заполняет список и установить начальное значение, как и ожидалось (это значение, проходя мимо модель)

ответ

3

С последним (возможно, работает на более ранних версиях) сборки KendoUI, начальное значение Текст может быть установлен на выпадающие:

.... 
    .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 
3

на Kendo DropDownList вы можете указать SelectedIndex следующим образом:.

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

с DropDownList можно только указать индекс элемента, который должен быть выбран. Вы не можете выбрать этот элемент по его тексту.

Используя API-интерфейс на стороне клиента, вы можете установить установленное выбранное значение на основе текста, используя the value method. Просто добавьте e vent on the data bound, который вызывает функцию JavaScript. Затем эта функция может выбрать нужный элемент на основе его текста.

+0

Спасибо за ответ. Я могу добавить событие привязки данных, но не знаю, как получить значение свойства модели (которое является NATIONALITY) на javascript – balron

+0

Поскольку вы используете синтаксис Razor, для доступа к «объектам C#» в JavaScript вам нужно добавить перед именем переменной '@': 'function test() {alert (@ Model.NATIONALITY);}'. –

+0

Я попытался, но @ model.Nationality кажется нулевым, потому что он инициализирован перед запуском действия чтения. – balron

0

То, что сработало для меня было назвать коробку DROPDOWNLIST так же, как свойство в модель:

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")) 

) 
Смежные вопросы