Параметры Telerik MVC Grid Ajax?

Мне как бы надоело вычислять параметры Ajax Grid. Я создал несколько сеток, и параметры кажутся волей-неволей, я пробую одно, у одного не работает, а у другого работает.

Насколько я понимаю, вам действительно не нужно помещать параметры в .DataBinding, если эти параметры существуют в коллекции .DataKeys? Это кажется произвольным, когда это работает, а когда нет.

Может ли кто-нибудь дать мне краткий обзор привязки сетки Ajax и передачи параметров контроллеру, чтобы я мог выбрать данные для его заполнения? Почему мне нужно определять параметры, а в других случаях это работает как по волшебству?

В последнее время каждая мелочь кажется битвой с элементами управления Telerik MVC, даже то, что я делал 5-6 раз раньше.

В этом случае: LineItemID - это первичный ключ, а JobID - это внешний ключ. Я действительно хочу передать JobID в привязку выбора. Я хочу получить все позиции с определенным JobID.

Вид:

@{  Grid<viaLanguage.Jams.Data.tblJobManagementLineItem> grid = Html.Telerik().Grid<viaLanguage.Jams.Data.tblJobManagementLineItem>()
        .Name("InvoiceLineItemsGrid")
        .DataKeys(keys =>
        {
            keys.Add(i => i.LineItemID);//.RouteKey("LineItemID");
            keys.Add(i => i.JobID);//.RouteKey("jobID");
        })
        .DataBinding(dataBinding => dataBinding.Ajax()
            .Select("_SelectInvoiceLineItems", "Job", new { jobID = "<#= JobID #>" })
            .Insert("_InsertJobInvoice", "Job")
            .Update("_UpdateJobInvoice", "Job")
            .Delete("_DeleteJobInvoice", "Job"))
        .ToolBar(commands => commands.Insert().HtmlAttributes(new { style = "margin-left:0" }))
        .Columns(columns =>
        {
            columns.Bound(l => l.JobID);
            columns.Bound(l => l.LineItemDescr).Width(180).HeaderTemplate("Task");
            columns.Bound(l => l.LanguagePairID).Width(100).HeaderTemplate("Language Pair").ClientTemplate("<#= LanguagePair #>");
            columns.Bound(l => l.SourceWordCount).Width(100).HeaderTemplate("Source Words");            
            columns.Bound(l => l.QtyToInvoice).Width(100).HeaderTemplate("Quantity to Invoice");
            columns.Bound(l => l.Rate).Width(50).Format("${0:0.000}").HeaderHtmlAttributes(new { style = "text-align: center;" }).HtmlAttributes(new { style = "text-align: center;" });
            columns.Bound(l => l.SubTotal).Width(100).Format("{0:c}");
            columns.Command(commands =>
            {
                commands.Edit().ButtonType(GridButtonType.Image);
                commands.Delete().ButtonType(GridButtonType.Image);
            }).Width(80).HtmlAttributes(new { style = "white-space: nowrap;" });
        })
        .Resizable(resizing => resizing.Columns(true))
        .Sortable()
        .Selectable()
        .Pageable(paging => paging.PageSize(10))
        .Scrollable(c => c.Height("233px"))
        .Filterable();

    StringWriter sw = new StringWriter();
    grid.Render();
    grid.WriteInitializationScript(sw);
}           

@Html.Hidden("InvoiceLineItemsGrid_tGrid", sw.GetStringBuilder().ToString())

Контроллер:

[GridAction]
public ActionResult _SelectInvoiceLineItems(int jobID)
{
    logLogic.logger.Debug(logLogic.GetMethodName() + ": User '" + User.Identity.Name);
    return View(new GridModel(jobLogic.GetInvoiceLineItems(jobID, User.Identity.Name)));
}

Заранее благодарим за понимание. Стив


person Steve3p0    schedule 24.09.2011    source источник
comment
Что не работает? Параметр null или пустая строка или что-то в этом роде? Или у вас какая-то ошибка?   -  person MattW    schedule 25.09.2011
comment
Да, Мэтт прав, тебе нужно быть более конкретным. Какое значение вы получаете в своем действии контроллера. Поскольку вы используете разбиение на страницы, попробуйте выяснить, работает ли запрос для первой страницы и перестает работать, когда вы переходите на другую страницу. Кроме того, должен быть какой-то шаблон, в котором вы получаете неправильные значения в методе действия.   -  person Jatin    schedule 25.09.2011


Ответы (2)


Увидел аналогичный вопрос на форуме Телерикс. Я использовал событие OnDataBinding, как описано в этой статье: При передаче параметров контроллеру из вызова привязки AJAX.

Работает для меня. Использование расширений Telerik 2012 Q2.

person jprusakova    schedule 02.08.2012

Попробуйте указать .RouteKey ("someName") для каждого ключа данных, который вы хотите (необходимо) автоматически получить на контроллере, "someName" должно совпадать с именем параметра действия.

person ttsushko    schedule 23.05.2013