У меня есть страница, которая предоставляет объекты Question как набор <div>
. (Я также использую Pagination, но я не думаю, что это имеет какое-либо значение для этой конкретной проблемы).
Я хотел бы дать пользователю возможность выбрать заказ, в котором элементы отображаются (например, порядок основного списка вопросов.
Я полагал, что использование списка <select>
было бы простым способом, но, похоже, оно не работает. Я в основном борется с вызовом Action от моего контроллера из Javascript. Это то, что у меня есть до сих пор:
Мой 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;
}
}
Это, конечно, вызывается в документе.
Проблема в том, что при запуске JS он формирует все амперсанды (&) к их экранированному эквиваленту (&). Конечно, это не работает, потому что параметры для действий контроллера разделены чистыми амперсандами.
Я получаю это как ссылку, когда я пытаюсь изменить выбор:
http://localhost:41084/Question?topicId=-1&sort=0
Кто-нибудь знает, как я могу это решить? Я не уверен, как я могу правильно называть действия из Javascript, и я также не знаю, есть ли способ JavaScript здесь.
Найденное решение должно было сделать 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;
}
}