Kendoui DropDownList в сетке с Ajax и параметром (ASP.NET MVC)

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

@(Html.Kendo().DropDownList()
    .Name("positions")
    .DataValueField("EmpId")
    .DataTextField("EmpName")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("_AjaxGetEmps", "Emp", new { Empid = <empid of currently selected grid row> });
        }).ServerFiltering(true);
    })
)

Что мне поставить, где? То, что я пытаюсь сделать, это ссылка на поле из сетки текущей выбранной строки. Каждая строка сетки может иметь разные значения в раскрывающемся списке, и мне нужно передать значение в метод AjaxGetEmps. Я использую ASP.NET MVC с механизмом представления Razor.


person carlg    schedule 18.09.2012    source источник


Ответы (1)


Вы должны передать параметр Empid через метод Data вместо того, чтобы напрямую указывать такой параметр:

@(Html.Kendo().DropDownList()
    .Name("positions")
    .DataValueField("EmpId")
    .DataTextField("EmpName")
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("_AjaxGetEmps", "Emp")
                .Data("getCurrentEmpid"); // this links to a javascript function 
                                          // which will get the current emp id
        }).ServerFiltering(true);
    })
)

и функция javascript должна быть реализована следующим образом:

function getCurrentEmpid() {
    var grid = $("#idGrid").data("kendoGrid"); // where "idGrid" is the id of your grid

    return {
        Empid: grid.dataItem(grid.select()).Empid
    }
}

Здесь grid.select() возвращает выбранную строку в вашей сетке, а grid.dataItem(row) получает данные, связанные с этой строкой. Итак, здесь Empid должен быть идентификатором вашего класса модели. Также обратите внимание, что если у вас есть флаг от GridSelectionMode до Multiple, вам придется зациклить массив grid.select()...

person Samuel Caillerie    schedule 21.09.2012