更新jqGrid行时格式化丢失

时间:2011-10-03 21:08:55

标签: javascript jquery asp.net-mvc-3 jqgrid

我显示了一个jqGrid食谱表,并为用户提供了一个主 - 详细信息类型视图。当用户从网格中选择配方时,它会在网格下方的div中显示该配方的详细信息。然后,我在div中提供了就地编辑功能。当用户保存编辑内容时,我会将详细信息重新显示给配方。这一切都运作良好。现在,选定的网格行可能包含与更新后详细信息显示的数据不匹配的数据,因此我执行类似这样的操作来更新网格:

$.ajax({
   type: "GET",
   data: "id=" recipeId,
   url:  '@Url.Action("GetGridDataForRecipe", "Recipe")',
   dataType: "json",
   success: function (result) {
      var myGrid = $("#recipeGrid");
      var selRowId = myGrid.jqGrid('getGridParam', 'selrow');
      myGrid.jqGrid('setRowData', selRowId, result);
   }
});

我的控制器操作如下:

public JsonResult GetGridDataForRecipe(int id)
{
   // ...
   var recipeData = context.recipes.Where(m => m.RecipeId == id).Select(row => new
   {
      RecipeId = row.RecipeId,
      RecipeName = row.RecipeName,
      RecipeDate = row.RecipeDate,
   }).First();
   return Json(recipeData, JsonRequestBehavior.AllowGet);
}

因此,更新工作几乎完美,但RecipeDate条目最终显示如下:

/Date(1317182400000)/

而不是格式化的日期:

10/03/2011

我在返回网格行时在colModel中指定的内容:

{ name: 'RecipeDate', index: 'RecipeDate', width: 120, align: 'left', sorttype: 'date',
   formatter: 'date', formatoptions: { newformat: 'm/d/Y'},
...

我在显示网格时指定的colModel与我稍后更新的数据之间存在脱节。我是否需要重新指定此信息?我该怎么做?

2 个答案:

答案 0 :(得分:1)

  

我是否需要重新指定此信息?

  

我该怎么做?

您可以在从控制器操作返回的匿名对象中执行此格式化:

var recipeData = context.recipes.Where(m => m.RecipeId == id).Select(row => new
{
    RecipeId = row.RecipeId,
    RecipeName = row.RecipeName,
    RecipeDate = row.RecipeDate.ToString("MM/dd/yyyy"),
}).First();

答案 1 :(得分:0)

Found an answer on GitHub.

Adding $.jgrid.formatter.date.reformatAfterEdit = true; before I call setRowData seems to be a good work around for now.

I added this code and my dates now come out formatted as I expect.