索引页面排序集合的附加参数

时间:2014-04-14 16:42:08

标签: javascript html asp.net-mvc action

我有一个页面,它将问题对象呈现为一组<div>&#39; s。 (我也使用分页,但我不认为它对这个特殊问题有任何意义)。

我想让用户有机会选择显示项目的顺序(也就是基础问题清单的顺序。

我认为使用<select>列表将是一种简单的方法,但它似乎并没有起作用。我主要是在努力从Javascript调用我的控制器中的Action。这就是我到目前为止所做的:

我的HTML:

<select id="sort-select" style="margin-bottom: 10px">
    @foreach (SortingType value in Enum.GetValues(typeof (SortingType)).Cast<SortingType>())
    {
        <option value="@((byte)value)">@(value.ToString())</option>
    }
</select>

(SortingType是包含3个常量的枚举。)

我的JavaScript:

function AddSort() {
    var select = document.getElementById('sort-select');

    select.onchange = function(event) {
        var selected = select.options[select.selectedIndex].value;

        var url = encodeURI("@Url.Action("Index", new {topicId = ViewBag.TopicId, sort = 0})");
        url.replace('&amp;', '&');
        url.replace(0, selected);

        window.location.href = url;
    }
}

这当然是在document.ready中调用的。

问题是,当JS运行时,它会形成所有&符号(&amp;)到它们的转义等价物(&amp;)。当然这不起作用,因为Controller的Actions的参数由纯符号分隔。

当我尝试更改选择时,我将此作为链接:

http://localhost:41084/Question?topicId=-1&amp;sort=0

任何人都知道如何解决这个问题?我不确定如何以适当的方式调用Javascript中的操作,而且我也不知道JavaScript是否可以用于此处。

1 个答案:

答案 0 :(得分:0)

发现解决方案必须url = url.replace(...)而不仅仅是url.replace(...)

我的javascript现在看起来像这样:

function AddSort() {
    var select = document.getElementById('sort-select');

    select.onchange = function(event) {
        var selected = select.options[select.selectedIndex].value;

        var url = encodeURI("@Url.Action("Index", "Question", new {topicId = ViewBag.TopicId, sort = 0})");
        url = url.replace('&amp;', '&');
        url = url.replace(0, selected);

        window.location.href = url;
    }


}