Мне как бы надоело вычислять параметры 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)));
}
Заранее благодарим за понимание. Стив