Редактирование сетки MVC 3 Razor Telerik с помощью Ajax - PullRequest
0 голосов
/ 19 октября 2011

Я пытаюсь сделать встроенное редактирование с записью в моей сетке.

Как только я нажимаю кнопку Сохранить, мой связанный контроллер начинает нормально работать.

Однако я не знаю, как получить данные из Модели (которая содержит данные сетки) в действии Контроллера. Может кто-нибудь помочь мне?

Вот код для просмотра:

@model Telerik.Web.Mvc.GridModel<YeagerTech.YeagerTechWcfService.Customer>
@{
    ViewBag.Title = "Customer Index";
}
<h2>
    Customer Index</h2>
@(  Html.Telerik().Grid<YeagerTech.YeagerTechWcfService.Customer>(Model.Data)
      .Name("Customers")
            .DataKeys(dataKeys => dataKeys.Add(o => o.CustomerID)
                                            .RouteKey("CustomerID"))
                .ToolBar(commands => commands.Insert().ButtonType(GridButtonType.Text).ImageHtmlAttributes(new { style = "margin-left:0" }))
      .Columns(columns =>
            {
                columns.Bound(o => o.CustomerID).Hidden(true);
                columns.Command(commands =>
                {
                    commands.Edit().ButtonType(GridButtonType.Text);
                }).Width(200).Title("Command");
                columns.Bound(o => o.Email).Width(200);
                columns.Bound(o => o.Company).Width(200);
                columns.Bound(o => o.FirstName).Width(100).Title("FName");
                columns.Bound(o => o.LastName).Width(100).Title("LName");
                columns.Bound(o => o.Address1).Width(200).Title("Addr1");
                columns.Bound(o => o.Address2).Width(100).Title("Addr2");
                columns.Bound(o => o.City).Width(100);
                columns.Bound(o => o.State).Width(40).Title("ST");
                columns.Bound(o => o.Zip).Width(60);
                //columns.Bound(o => o.HomePhone).Width(120);
                //columns.Bound(o => o.CellPhone).Width(120);
                //columns.Bound(o => o.Website).Width(100);
                //columns.Bound(o => o.IMAddress).Width(100);
                //columns.Bound(o => o.CreatedDate).Format("{0:MM/dd/yyyy}").ReadOnly(true).Width(120);
                //columns.Bound(o => o.UpdatedDate).Format("{0:MM/dd/yyyy}").ReadOnly(true).Width(120);
            }).DataBinding(dataBinding =>
                dataBinding.Ajax()
                        .Insert("_InsertAjaxEditing", "Customer")
                        .Update("_SaveAjaxEditing", "Customer"))
    .Editable(editing => editing.Mode(GridEditMode.InLine))
    .Pageable()
    .Sortable()
    .Scrollable()
 )

Вот код для контроллера:

[HttpPost]
        [GridAction]
        public ActionResult _SaveAjaxEditing()
        {
            YeagerTechWcfService.Customer cust = new YeagerTechWcfService.Customer();

            if (TryUpdateModel(cust))
            {   
                try
                {
                    db.EditCustomer(cust); // This is a WCF method which works fine...
                    TempData["ErrCode"] = "Customer successfully updated.";
                    return RedirectToAction("Index", "Home");
                }
                catch (Exception ex)
                {
                    TempData["ErrCode"] = "CustErr";
                    ViewBag.Error = ex.Message;
                    return View();
                }

            }
            else
                return View();
        }

1 Ответ

0 голосов
/ 16 апреля 2013

Я думаю, что данные, которые вы получаете, это модель, которая привязана к сетке, и одна сущность, которую вы редактируете, отправляется обратно. контроллер может быть объявлен как показано ниже:

    [GridAction(EnableCustomBinding = true)]
    public ActionResult _SaveAjaxEditing(Customermodel, GridCommand command)
...