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

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

1 голос
/ 25 сентября 2011

Мне надоело пытаться определить параметры 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)));
}

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

Ответы [ 2 ]

1 голос
/ 23 мая 2013

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

1 голос
/ 02 августа 2012

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

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

...