我有一个页面,它将问题对象呈现为一组<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('&', '&');
url.replace(0, selected);
window.location.href = url;
}
}
这当然是在document.ready中调用的。
问题是,当JS运行时,它会形成所有&符号(&amp;)到它们的转义等价物(&amp;)。当然这不起作用,因为Controller的Actions的参数由纯符号分隔。
当我尝试更改选择时,我将此作为链接:
http://localhost:41084/Question?topicId=-1&sort=0
任何人都知道如何解决这个问题?我不确定如何以适当的方式调用Javascript中的操作,而且我也不知道JavaScript是否可以用于此处。
答案 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('&', '&');
url = url.replace(0, selected);
window.location.href = url;
}
}