Как привязать Kendo DropDownList к вложенному объекту - PullRequest
2 голосов
/ 12 марта 2020

Примечание: здесь используется Kendo UI для. NET Core пакета, который, хотя и похож, имеет отличия от версии Jquery, поэтому, пожалуйста, сосредоточьтесь только на этой платформе.

Первоначально У меня был выпадающий список клиентов, который был привязан к IEnumerable<Client>, возвращенному из контроллера, и он работал нормально:

 @(Html.Kendo().DropDownList()
            .Name("ddlClient")
            .DataTextField("ClientName")
            .DataValueField("ClientID")
            .DataSource(source => {
                source.Read(read => {
                    read.Action("GetClient", "Home");
                });
            })           
        )

Но после реструктуризации некоторого кода я захотел иметь возможность вернуть IEnumerable<ClientViewModel> из контроллера, где ClientViewModel будет:

public class ClientViewModel{
   public Client SelectedClient {get; set;}
   public ClientDivison SelectedClientDivision {get; set;}
   public SomeOtherProperty TheSomeOtherProperty {get; set;}
   //etc
}

Я изменил раскрывающийся список следующим образом, но он не работает должным образом. Я проверил, что вызов контроллера все еще выполняется и все еще возвращает записи в порядке (типа ClientViewModel).

Вот модифицированный код DropDownList

  @(Html.Kendo().DropDownList()
            .Name("ddlClient")
            .DataTextField("SelectedClient.ClientName")
            .DataValueField("SelectedClient.ClientID")
            .DataSource(source => {
                source.Read(read => {
                    read.Action("GetClient", "Home");
                });
            })           
        )

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

Мне кажется, что я уже ссылался на вложенные свойства, подобные этим.

Что я тут не так понял?

1 Ответ

2 голосов
/ 22 марта 2020

Кажется, вы очень близки: просто запомните MVC сериализует JSON ключи объекта в camelCase по умолчанию:

это сработало для меня:

  @(Html.Kendo().DropDownList()
            .Name("ddlClient")
            .DataTextField("selectedClient.clientName") // notice casing on both properties
            .DataValueField("selectedClient.clientID") // notice casing on both properties
            .DataSource(source =>
            {
                source.Read(read =>
                {
                    read.Action("GetClient", "Home");
                });
            })
            )
...