2013-02-20 2 views
0

Я пытаюсь создать главную сетку Telerik MVC с привязкой Ajax. Когда я выбираю строку подробностей для обновления, нажмите «Изменить», отредактируйте значение и нажмите «Обновить», значение не обновляется на стороне клиента. Я вижу в отладчике, что модель не обновляется, когда я вызываю TryUpdateModel. Вот вид:Telerik Grid Not Updating

@(Html.Telerik().Grid<FeeSrcMstrDteViewModel>() 
.Name("FeeSourceConfirmMasterGrid") 
.Columns(columns => 
    { 
     columns.Bound(m => m.FEE_SRC_NME).Width(65).Title(@FeeBuilderResource.FeeSourceName); 
     columns.Bound(m => m.PUBLISHING_ENTITY_NME).Width(45).Title(@FeeBuilderResource.PublishingEntity); 
     columns.Bound(m => m.FEE_SRC_SRVC_CATEGORY_NME).Width(55).Title(@FeeBuilderResource.ServiceTypeCategory); 
     columns.Bound(m => m.FEE_SRC_PUBLISHED_DTE).Width(45).Title(@FeeBuilderResource.PublishedDate).Format("{0:d}"); 
     columns.Bound(m => m.YEAR).Width(30).Title(@FeeBuilderResource.Year); 
     if (Model.FeeSourceMasterDate.GEO_LOC_ID == 1 || Model.FeeSourceMasterDate.GEO_LOC_ID == 4) 
     { 
      columns.Bound(m => m.STATE).Width(50).Title("State or carrier locality"); 
     } 
     else 
     { 
      columns.Bound(m => m.CARRLOC).Width(50).Title("State or carrier locality"); 
     } 
     //columns.Command(commands => commands.Custom("ExportToExcel").Text("Export to Excel") 
      //.DataRouteValues(route => route.Add(m => m.FeeSourceMasterDate.FEE_SRC_MSTR_ID).RouteKey("FEE_SRC_MSTR_ID")) 
      //.Ajax(false).Action("_ConfirmMasterExportXlsAjax", "FeeSrcFlatRate", new { feeSourceServiceMasterDateId = "<#= FEE_SRC_MSTR_ID #>" })) 
      //.HtmlAttributes(new { style = "text-align: center" }).Width(50).Title(@FeeBuilderResource.Actions); 
    }) 
    //.ClientEvents(events => events.OnSave("FeeSourceTestGrid_OnSave")) 
    .DetailView(details => details.ClientTemplate(
     Html.Telerik().Grid<FeeSourceFlatRateCommentsViewModel>() 
     .Name("FeeSourceHome_<#= FEE_SRC_MSTR_ID #>") 
     .DataKeys(keys => keys.Add(m => m.CommentId)) 
     .DataBinding(dataBinding => dataBinding.Ajax() 
      .Select("_GetFeeSourceDetailDataAjax", "FeeSrcFlatRate") 
      .Update("_UpdateFeeSourceDetailDataAjax", "FeeSrcFlatRate") 
      ) 
     .Columns(columns => 
     { 
      columns.Bound(m => m.CommentId).Width(200).Hidden(); 
      columns.Bound(m => m.FeeSourceDescription).Width(200).Title("Fee source description"); 
      columns.Bound(m => m.FeeSourceComments).Width(200).Title("Fee source comments"); 
      columns.Command(commands => 
      { 
       commands.Edit().ButtonType(GridButtonType.ImageAndText); 
      }).Width(75); 

     }) 
     .DataBinding(dataBinding => dataBinding.Ajax() 
      .Select("_GetFeeSourceDetailDataAjax", "FeeSrcFlatRate", new { id = "<#= FEE_SRC_DTE_ID #>" })) 
      .Editable(editing => editing.Mode(GridEditMode.InLine).InsertRowPosition(GridInsertRowPosition.Top)) 
      .Footer(false) 
      .ToHtmlString() 
      )) 
.DataBinding(dataBinding => dataBinding.Ajax() 
    .Select("_GetFeeSourceDataAjax", "FeeSrcFlatRate")) 
    .Pageable(paging => paging.PageSize(20)) 
    //.Scrollable(scrolling => scrolling.Height(580)) 
    .Sortable() 
) 

Методы выбора работают отлично, но не метод обновления. Я бы ожидал, что модель будет обновлена, когда я вызову TryUpdateModel в моем контроллере, но я этого не вижу. Вот мой код контроллера:

[HttpPost] 
[GridAction] 
public ActionResult _UpdateFeeSourceDetailDataAjax(int id) 
{ 
    FeeSourceFlatRateViewModel modelTest = new FeeSourceFlatRateViewModel();   

    List<FeeSourceFlatRateCommentsViewModel> commentsList = new 

List<FeeSourceFlatRateCommentsViewModel>(); 

     // get the model by id 
     IFeeSourceMstrRepository repo = new FeeSourceMstrRepository(); 

     IList<FeeSrcMstrDteViewModel> modelTestList = repo.GetFeeSrcMstrDteViewModel((int)id); 
     FeeSrcMstrDteViewModel modelTestChange = modelTestList[0]; 

     //Perform model binding (fill the product properties and validate it). 
     if (TryUpdateModel(modelTestChange)) 
     { 
      var testy = modelTestChange; 

      // set the comments 
      FeeSourceFlatRateCommentsViewModel modelComments = new FeeSourceFlatRateCommentsViewModel 
      { 
       CommentId = id, 
       FeeSourceDescription = modelTestChange.FEE_SRC_DESC, 
       FeeSourceComments = modelTestChange.FEE_SRC_COMMENTS 
      }; 

      commentsList.Add(modelTestChange); 

      // save the object 
      repo.SaveFeeSrcUOW(saveModel); 
      OperationStatus opStatus = repo.Save(); 

     } 

     TempData["FeeSourceFlatRateModel"] = modelTestChange; 
     return View(new GridModel(commentsList)); 
    } 

Что мне не хватает? Спасибо за помощь!

ответ

0

Я получил некоторую помощь с сайта Telerik. Как оказалось, я пытался обновить неверную модель. Моя главная сетка привязана к FeeSrcMstrDteViewModel, но моя сетка деталей, которую я хочу обновить, привязана к FeeSourceFlatRateCommentsViewModel.

Исправление должно было вызвать TryUpdateModel на FeeSourceFlatRateCommentsViewModel.