Все еще возникают проблемы с перенаправлением ddl - PullRequest
0 голосов
/ 26 июня 2019

У меня все еще есть проблемы. Я думаю, что я пытаюсь сделать это просто. У меня есть дроплист Viewbag - который работает нормально. Я просто хочу перенаправить на выделение это перенаправление, как: @Html.ActionLink("Branch", "Employees", new { Branch = item.Branch }) | (но с выбором из выпадающего списка) Это должно быть сложно?

@Html.DropDownList("Branches", ViewBag.Branches as SelectList, "Select a Branch", new { @id = "ddlBranch" })

<script>
    $(function () {

        $("#ddlBranch").on("change", function () {
            var deptId = $(this).val();
            var routeVal = { Id: deptId };
            var url = '@Url.Action("Department", "Home")';

            $.ajax({
                url: url,
                type: 'POST',
                data: routeVal
            }).done(function (result) {
                window.location.href = result.newUrl;
            })
        })

    })
</script>

1 Ответ

1 голос
/ 26 июня 2019

Из комментария на вопрос выше:

Так что теперь мне просто нужно перенаправить на: @Html.ActionLink("Branch", "Employees", new { Branch = item.Branch }), но Item.Branch будет $(this).val().Можно ли это сделать?

Возможно, есть более элегантный способ, но подход, который я всегда использовал, выглядит примерно так:

let url = '@Html.ActionLink("Branch", "Employees", new { Branch = "REPLACEME" })';
url = url.replace('REPLACEME', $(this).val());
window.location.href = url;

На стороне клиента этопревращается во что-то вроде:

let url = '/Brand/Employees?Branch=REPLACEME';
url = url.replace('REPLACEME', encodeURIComponent($(this).val()));
window.location.href = url;

Это было бы глупо для любого, кто изучает только код на стороне клиента, я уверен.Но поскольку параметр Branch может находиться в строке запроса или может находиться в маршруте, и так как ASP.NET MVC Framework отвечает за управление этим, генерация URL иразмещение значения на стороне клиента в URL-адресе - это две отдельные обязанности.

Поэтому мы используем код на стороне сервера для генерации URL-адреса с заполнителем (может быть любой строкой, * 1025)* был произвольным выбором), а затем используйте код на стороне клиента для динамической замены этого заполнителя на желаемое значение.

Это по существу заменяет все, что вы пытаетесь сделать с AJAX в исходном вопросе.Если вам не нужно вызывать операцию на стороне сервера, чтобы получить результат, неизвестный коду на стороне клиента, для создания URL-адреса, вы можете просто полностью пропустить AJAX и создать этот URL-адрес напрямую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...