1

我有一个带有下拉列表和分页系统的视图。单击其中一个分页链接时,我需要保留下拉列表的选定索引值。

这是下拉列表:

@Html.DropDownList("typeId", types, "-- Filter by type --", new { style= "width: 110px;", onchange = "location.href='" + Url.Action("List", new { month = selectedMonth, year = selectedYear }) + "?typeId=' + $(this).val()" })

和分页系统:

<div style="margin-top: 15px">

    <span>
        @Html.ActionLink("First", "List", new { month = months[0].Item1, year = months[0].Item3 })
    </span>
    <span style="margin-right: 15px">
        @Html.ActionLink("Previous", "List", new { month = previousMonth, year = previousMonthYear })
    </span>
    @foreach (var entry in months)
    {
        if (selectedMonth == entry.Item1 && selectedYear == entry.Item3)
        { 
        <span>
            @Html.ActionLink(entry.Item2, "List", new { month = entry.Item1, year = entry.Item3 }, new { @class = "current" })
        </span>
        }
        else
        {
        <span>
            @Html.ActionLink(entry.Item2, "List", new { month = entry.Item1, year = entry.Item3 })
        </span>
        }
    }
    <span style="margin-left: 15px">
        @Html.ActionLink("Next", "List", new { month = nextMonth, year = nextMonthYear })
    </span>
    <span>
        @Html.ActionLink("Last", "List", new { month = months[11].Item1, year = months[11].Item3 })
    </span>
</div>

任何想法表示赞赏。

PD:我想在分页链接单击时将所选值作为路由值传递。

我试图这样做:

@Html.ActionLink("Last", "List", new { month = months[11].Item1, year = months[11].Item3, typeId = "$('#typeId option:selected')" })

但我从客户端 (:) 错误中检测到一个潜在危险的 Request.Path 值。我怎样才能防止这个错误?

4

3 回答 3

0

一个技巧可能是使用 AJAX 加载下一页,当您使用下拉菜单切换或在查询字符串中设置页码和页面加载时,从查询字符串中获取页码并在下拉菜单中设置所选值.

于 2013-08-07T14:15:09.437 回答
0

如果将有回发下拉列表将失去其值,因为它是 MVC,我们不能使用 ViewState。所以我的建议是:

  1. 将此下拉列表从表单标签中取出
  2. 让值进入控制器并将其返回给 Viewstate
  3. 对视图进行部分渲染

不确定它是否会对您当前的结构有所帮助。

于 2013-08-07T12:08:44.127 回答
0

找到了一种解决方法(在我同事的帮助下):一个老式的 html 链接,我在其中设置了这样的 url:

<a href="@(Url.Action("List", "Notifications", new { month = months[0].Item1, year = months[0].Item3 }) + (typeId.HasValue ? "/" + typeId.Value : ""))">First</a>
于 2013-08-07T14:18:17.067 回答