在ASP.NET MVC上保留下拉列表值

时间:2013-08-07 12:02:30

标签: asp.net-mvc

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

这是下拉列表:

@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值。如何防止此错误?

3 个答案:

答案 0 :(得分:0)

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

  1. 从表格标记
  2. 中取下此下拉列表
  3. 让值进入控制器并将其返回Viewstate
  4. 执行部分呈现视图
  5. 不确定它对您当前的结构是否有帮助。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

找到一个解决方法(在我的同事的帮助下):一个老式的HTML链接,我在这里设置了这样的URL:

<a href="@(Url.Action("List", "Notifications", new { month = months[0].Item1, year = months[0].Item3 }) + (typeId.HasValue ? "/" + typeId.Value : ""))">First</a>