MVC WebGrid分页操作在导航时发生变化

时间:2017-06-13 19:09:54

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 asp.net-mvc-5

我正在使用带分页的webgrid的MVC应用程序中工作。网格本身在名为_Results.cshtml的局部视图中呈现,并使用

在index.cshtml页面上的div中呈现
Html.RenderPartial("_Results", Model.Results);

index.cshtml上的部分网格以及一些其他表单控件包含在一个名为ResultsAction的表单中,使用:

@using (Ajax.BeginForm("ResultsAction", "Results", new AjaxOptions.....

当最初导航到index.cshtml时,网格按预期填充并悬停在任何分页链接上正确显示:

http://localhost/ResultsAction?page=<page#>

网格中的每一行都有一个指向详细信息页面的链接。这按预期工作,详细信息页面有一个链接,使用以下命令返回结果网格:

@Html.ActionLink("Return To Results", "Index", "Results")

现在问题。这将我重新定向回Index.cshtml就好了,但现在当我将鼠标悬停在网格中的任何分页链接上时,他们错误地使用了:

http://localhost/Index?page=<page#>

哪个控制器操作错误,因此分页不再起作用。我的理解是分页链接应该使用表单名称作为动作发出Get,但是当我导航到详细信息然后再返回时,它会以某种方式被覆盖。有谁知道造成这种行为的原因或我如何指定分页链接以始终使用相同的控制器操作?

编辑:根据要求发布部分视图代码:

@model IEnumerable<ispPR_GetInquiryRecords_Result>

@{
    Layout = null;
}

<input id="searchListCnt" type="hidden" value="@Model.Count()" />

<div id="gridSearch">

@{

    var grid = new WebGrid(selectionFieldName: "SelectedRow", canSort: false, canPage: true, rowsPerPage: 10, ajaxUpdateContainerId: "gridSearch");

var virtualCount = Model != null && Model.Count() > 0 ? Model.First().VirtualCount : 0;

grid.Bind(Model, rowCount: (int)virtualCount, autoSortAndPage: false);
}

    <div id="gridContent">
    @grid.GetHtml(
    htmlAttributes: new { id = "inqgrid" },
    tableStyle: "webGrid",
                  fillEmptyRows: false,
                  footerStyle: "gridFooter",
                  displayHeader: true,
                  alternatingRowStyle: "alt",
                  selectedRowStyle: "select",
                  mode: WebGridPagerModes.All,
                  columns: grid.Columns(
                  grid.Column("PriceStatus",header:"Price Status"),
                      grid.Column("CustomerName","Customer Name"),
                      grid.Column("EndUserName", "End User"),
                      grid.Column("ContractNumber","Contract"),
                      grid.Column("PriceLevel", "Level"),
                      grid.Column("ProductDescription", "Product Code"),


                      grid.Column(

                                            header: "Break Qty",                           
                                            format: @<text>@item.QuantityBreak.ToString() / @item.QuantityBreakUOM </text>

                                        ),

                      grid.Column("BeginDate", "Begin Date", format: item =>string.Format("{0:d}", item.BeginDate)),
                      grid.Column("EndDate","End Date",format: item =>string.Format("{0:d}", item.EndDate)),

                        grid.Column(
                                        header: "Price in PricingUOM",
                                        format: item =>
                                            {
                                                var res = Html.FormatToDecimals((decimal)item.PriceInPricingUOM, (int)item.Numdecimals);

                                                switch ((bool)@item.HasDetail)
                                                {
                                                    case true:


                                                        return Html.ActionLink(res + " / " + (string)item.PricingUOM, "InquiryDetails", new { @id = @item.PriceMasterID }, new { @class = "item-link2", @id = "lnk_" + @item.PriceMasterID });
                                                    case false:
                                                        return Html.ActionLink(res+ " / " + (string)item.PricingUOM, null, null, new { onclick = "return NoDetailsDialog('" + @item.NoDetailReason + "')" });


                                                }

                                                return null;
                                            }
                                            ),

                      grid.Column(
                                            header: "Price Alt UOM",
                                            format: @<text>@Html.FormatToDecimals((decimal)item.PriceInOrderUOM, (int)item.Numdecimals) / @item.OrderUOM </text>

                                        ),

                      grid.Column("Rolling12", "Rolling 12 Sales", format: @<text>@String.Format("{0:c0}", @item.Rolling12) </text>),
                      grid.Column("CMPercent", "Net CM ", format: @<text>@String.Format("{0:0.00} %", @item.CMPercent * 100) </text>)


    ))


</div>




</div>

<script type="text/javascript">
    function NoDetailsDialog(message) {

        alert(message);
        return false;
    }
</script>

2 个答案:

答案 0 :(得分:0)

您可以使用数据表。请告诉我您如何使用数据表,我可以帮助您完成它, 我甚至可以帮助使用剃刀语法:

nuget DataTabes.net jquery插件

bundles.Add(new StyleBundle("~/Content/CssGrid").Include(
                    "~/Content/DataTables/css/jquery.dataTables.min.css"));

bundles.Add(new ScriptBundle("~/bundles/JSGrid").Include(
                    "~/Scripts/DataTables/jquery.dataTables.min.js"));

JavaScript的:

//perform tasks like initialize fields, show popup, and post to server
function DeleteMe()
function EditMe()
function Add()

页:     

$(document).ready(function() {
    $('#theDataTable').DataTable();

} );

</script>

//button to show popup for add/edit here
<table id="theDataTable" class="display table table-striped table-bordered">
                <thead>
                    <tr>
                        <th>Field Name A
                        </th>
                        <th>Field Name B
                        </th>
                        <th>Field Name C
                        </th>
                         </th>
                        <th>Delete
                        </th>
                        <th>Edit
                        </th>
                </thead>
                <tbody>
                    <%  int rowCount = 0;
                        foreach (AClass item in Model.AClassList)
                        { %>
                    <tr id="<%:rowCount%>">
                        <td><%:item.FieldA%></td>
                        <td><%:item.FieldB%></td>
                        <td><%:item.FieldC%></td>
                        <td>
                            <a href="#" title="Delete" class="btn btn-default btn-xs btn-block"
                                onclick="return DeleteMe('<%:item.Id%>')">Delete</a>
                        </td>
                        <td>
                            <a href="#" title="Edit" class="btn btn-default btn-xs btn-block"
                                onclick="return EditMe('', 
                                     '<%:item.FieldA %>',
                                     '<%: Html.Encode(item.FieldB) %>', 
                                     '<%: Html.Encode(item.FieldC) %>')">Edit</a>
                        </td>
                        <% rowCount++;
                        } %>
                    </tr>
                </tbody>
            </table>

Example that we can make prettier

答案 1 :(得分:0)

之前我遇到过同样的问题。在我的情况下,它最终与MVC视图解析器被限定为错误的文件夹有关,因为调用的控制器不同于用于构建我正在调用的视图的控制器。

我知道这没有多大帮助,而且在你的BeginForm声明中明确说明了控制器名称时,它看起来确实很奇怪。我让我的导师最终为我解决了这个问题,他通过反复试验这样做,只是评论出各种不同的行,直到问题被隔离为止。