0

我正在使用带有分页功能的 WebGrid 和 AJAX 弹出窗口来添加新条目。我注意到,在添加条目后,WebGrid 底部的分页链接变为非活动状态。

弹出窗口调用控制器的 Save 操作,完成以下操作:

return PartialView("_PersonGrid", pModel.Persons);

这里使用了三个视图。一个索引、一个网格和一个弹出窗口。网格嵌入在索引中,可以通过单击网格和索引上的按钮来调用弹出窗口。

索引视图具有以下代码:

@using (Ajax.BeginForm(new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "myUserGrid" }))
{

<div id="myUserGrid">
    @Html.Partial("_PersonGrid", Model.Persons)
</div>
<br />

    //other code
}

网格视图 (_PersonGrid.cshtml) 是:

@model IEnumerable<CIMsWebApp.Client.Group.Entities.IPerson>

@{  var grid = new WebGrid(Model, canSort: true, canPage: true, defaultSort: "UserName", ajaxUpdateContainerId: "myUserGrid"); }    


@grid.GetHtml(
    tableStyle: "dataGrid", 
    headerStyle: "header",
    alternatingRowStyle: "evenRow",
    columns: grid.Columns
    (
        grid.Column(header: "User Name", columnName: "UserName", format: item => Html.Raw("<a href='#' class='userNames' data-personid='"+item.PersonId+"'>" + item.UserName + "</a>"), canSort: false),
        grid.Column(header: "Role(s)", columnName: "Rolebuilder", canSort: false),
        grid.Column(header: "Active", columnName: "ActiveIndBuilder", canSort: false),
        grid.Column(header: "Action", format:
                                    @<span><input type="button" class="edit-user" id="@item.PersonId" value="EDIT" />
                                    </span>, canSort: false)
    )
)

最后弹出视图是:

@model CIMsWebApp.Models.PersonModel
@using (Html.BeginForm("Save", "Person", FormMethod.Post, new { id = "formUser" }))
{
    //code

}

当我第一次到达页面或刷新它时,它们再次变为活动状态。

4

2 回答 2

3

我猜你的 "ajaxUpdateContainerId: "myUserGrid"" 是一个 id="myUserGrid" 的 div,并且部分加载在那里。如果我错了,请纠正我,但我相信 div 应该在你的部分中。有时有点混乱,但你应该试试这个..

看法:

@*Everything else except the div*@
@{Html.RenderPartial("_PersonGrid", Model)

部分视图:

@model IEnumerable<CIMsWebApp.Client.Group.Entities.IPerson>
<div id="myUserGrid">
    @{  var grid = new WebGrid(Model, canSort: true, canPage: true, defaultSort: "UserName", ajaxUpdateContainerId: "myUserGrid"); }    


    @grid.GetHtml(
        tableStyle: "dataGrid", 
        headerStyle: "header",
        alternatingRowStyle: "evenRow",
        columns: grid.Columns
        (
            grid.Column(header: "User Name", columnName: "UserName", format: item => Html.Raw("<a href='#' class='userNames' data-personid='"+item.PersonId+"'>" + item.UserName + "</a>"), canSort: false),
            grid.Column(header: "Role(s)", columnName: "Rolebuilder", canSort: false),
            grid.Column(header: "Active", columnName: "ActiveIndBuilder", canSort: false),
            grid.Column(header: "Action", format:
                                @<span><input type="button" class="edit-user" id="@item.PersonId" value="EDIT" />
                                </span>, canSort: false)
        )
    )
</div>

如果这不起作用,请提供一些额外的数据(调用部分视图的视图、调用保存操作的位置和方式等...)

于 2012-10-30T14:48:25.003 回答
0

在研究了 WebGrid 分页实际上是如何工作的之后,似乎在执行保存之后它会尝试在 Save 方法上调用 GET 方法。因此,我为此目的创建了一个方法,然后将其重定向回 Index 方法。最后两个参数直接传递给查询字符串,然后在分页中使用。

[ActionName("Save")]
public ActionResult Pagination(string page, string __, long id = 0)
{
  return RedirectToAction("Index", new {id = id, page=page, __ = __ }); 
} 
于 2012-12-05T12:32:31.500 回答