Пользовательская кнопка в шаблоне ClientRowTemplate Telerik MVC Grid - PullRequest
0 голосов
/ 12 марта 2012

Извините, если это повторение.Я выполнил поиск и не нашел ничего, что точно соответствовало бы моей ситуации.

У меня есть сетка, которая требует ClientRowTemplate.У меня очень хорошо работает шаблон.

Мне нужна кнопка в этом RowTemplate, которая вызывает метод контроллера через ajax.Метод контроллера должен выполнять некоторую сложную логику, а затем возвращать новый набор данных в сетку, к которой затем должна будет привязываться сетка.Я думал, что это должно работать так же, как привязка AJAX.Например, когда вы выполняете сохранение или удаление (используя встроенные кнопки), вызывается ajax-метод с атрибутом [GridAction], а затем возвращается IQueryable.Сетка автоматически связывается с этим IQueryable.

Как мне сделать то же самое с пользовательской кнопкой?Можно ли добавить пользовательскую кнопку при использовании ClientRowTemplate?

1 Ответ

1 голос
/ 12 марта 2012

Поместите ссылку на клиентский шаблон вашей строки сетки

@(Html.Telerik().Grid<myModel>()
.Name("myGrid")
.Columns(columns =>
{
        @* You can put a link in your client template to trigger a refresh function *@
        columns.Bound(o => o.Id).ClientTemplate("<a href='javascript:refreshGrid(<#= Id #>);'>Refresh</a>");
        columns.Bound(e => e.col1);
        columns.Bound(e => e.col2);
        columns.Bound(e => e.col3);
})
.ClientEvents(events => events.OnDataBinding("myGrid_onRowDataBinding"))
.DataBinding(dataBinding => dataBinding.Ajax().Select("Action", "Controller", new { param1 = ..., param2 = ... } )))

Введите свой код для обновления сетки

<script type="text/javascript">

    //parameters needed for grid
    var x = ...;
    var y = ...;

    //grid refresh function
    function refreshGrid(id) {
        //make a call to server
        $.post("/controller/action/" + id, function() {

            //after making a successfull call to server
            //you may update parameters 
            x = ...;
            y = ...;

            //and rebind your grid
            $('#myGrid').data('tGrid').rebind();
        })        
    }

    //grid on row data binding event
    function myGrid_onRowDataBinding(e) {
        e.data = $.extend(e.data, { param1: x, param2: y });
    }
</script>

Вот и все

РЕДАКТИРОВАТЬ:

Пример ClientRowTemplate

Вам нужно изменить только код сетки.Остальное такое же.

@(Html.Telerik().Grid<myModel>()
.Name("myGrid")   
.ClientRowTemplate(grid => "<div class='firstcolumn'><a href='javascript:refreshGrid(<#= Id #>);'>Refresh</a></div><div class='secondcolumn'>Content....</div>")
.ClientEvents(events => events.OnDataBinding("myGrid_onRowDataBinding"))
.DataBinding(dataBinding => dataBinding.Ajax().Select("Action", "Controller", new { param1 = ..., param2 = ... } )))
...