Добавить строку таблицы в сетке с проблемой нумерации страниц? - PullRequest
1 голос
/ 24 августа 2011

Я пытаюсь добавить строку в MVC3 WebGrid с разбивкой на страницы, используя JQuery.

Когда я добавляю новую строку, она корректно вставляется как последняя строка, но проблема возникает, когда в моей веб-сетке больше 1 страницы.

Новая строка, которая должна быть вставлена ​​в последнюю строку на последней странице WebGrid, вставляется на первую страницу WebGrid.

Javascript код:

$("#add-category-dialog").dialog({
        resizable: false,
        height: 300,
        modal: true,
        autoOpen: false,
        open: function (event, ui) {
            var objectid = 0;
            $('#add-category-dialog').load("/Categories/CreateEditPartial", { id: objectid });
        },
        buttons: {
            "Save": function () {
                var ai = {
                    categoryID: $(this).data('id'),
                    Name: $("#Name").val()
                };
                var json = $.toJSON(ai);

                $.ajax({
                    url: $(this).data('url'),
                    type: 'POST',
                    dataType: 'json',
                    data: json,
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {
                        $('.pretty-table tr:last').after('<tr><td>....</td></tr>');
                    },
                    error: function (data) {
                        var data = data;
                        alert("Error");
                    }
                });
                $(this).dialog("close");
            },
            Cancel: function () {
                $(this).dialog("close");
            }
        }
    });

$("#add-category-btn").live("click", function () {
    var url = $(this).attr('controller');

    $("#add-category-dialog")
        .data('url', url)
        .dialog('open');

    event.stopPropagation();
    return true;

});

Контроллер:

[HttpPost]
public ActionResult Create(Category Category)
{
    if (ModelState.IsValid)
    {
        context.Categories.Add(Category);
        context.SaveChanges();
    }

    return Json(new { Success = Category.CategoryID > 0, Category });
}

Вид:

var grid = new WebGrid(Model, ajaxUpdateContainerId: "category-grid", canPage: true, rowsPerPage: 30);

@grid.GetHtml(
        tableStyle: "pretty-table",
        headerStyle: "ui-widget-header",
        columns: grid.Columns(
        grid.Column("CategoryID", "Id", canSort: true, format: @<b>@item.CategoryID</b>),
        grid.Column("Name", "Name", canSort: true, format: @<b>@item.Name</b>)
        )
    )

1 Ответ

0 голосов
/ 29 августа 2011

Следующей строкой вы добавляете новую строку в качестве последней строки на текущей странице.

$('.pretty-table tr:last').after('<tr><td>....</td></tr>');

WebGrid с подкачкой, отображает строки только для конкретной страницы. Таким образом, созданный конечный html (таблица> tr) будет только для этой конкретной страницы. Итак, над строкой jQuery находит последнюю строку в сгенерированном html и вставляет строку после нее. В твоем случае наверное первая страница. Попробуйте перейти к последней странице (или любой странице между первой и последней), а затем добавьте новую строку и посмотрите, так ли это.

Код контроллера выглядит нормально, поэтому вы не должны ничего делать при успешном вызове ajax. Прокомментируйте строку выше и проверьте свой код. Добавьте новую строку и перейдите на последнюю страницу. Ваш новый ряд должен отображаться там.

...