#javascript #jquery #asp.net-mvc-3 #jqgrid
#javascript #jquery #asp.net-mvc-3 #jqgrid
Вопрос:
Я отображаю таблицу рецептов jqGrid и предоставляю пользователю представление типа master-details. Когда пользователь выбирает рецепт из сетки, он отображает детали этого рецепта в 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
тем, что я указал при отображении сетки, и данными, которые я обновляю позже. Нужно ли повторно указывать эту информацию? Как мне это сделать?
Ответ №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. Спасибо, Дарин, теперь это было намного проще, чем я предполагал. Отлично работает.
2. Для этого ответа требуется дублировать код форматирования на стороне сервера, что далеко не идеально. Я буду продолжать искать.
Ответ №2:
Нашел ответ на GitHub.
Добавление $.jgrid.formatter.date.reformatAfterEdit = true; перед тем, как я вызову setRowData, на данный момент кажется хорошим решением.
Я добавил этот код, и теперь мои даты отформатированы так, как я ожидаю.