Как вызвать действие контроллера, которое перенаправляет на другое действие через Javascript?

0

У меня есть кнопка devexpress, на мой взгляд, которая работает только с javascript. Поэтому мне нужно вызвать действие через это событие click.

Мой сценарий:

 function OnCommandExecuted(s, e) {
    if (e.item.name == "SendData") {           
        $.post("/Product/ExportData");
    }
 }

Когда я нажимаю на эту кнопку, Action/Product/ExportData выполняется, но ничего мне не возвращает. Мои действия:

 public ActionResult ExportData()
    {
        return RedirectToAction("Test");
    }

    public ActionResult Test()
    {
        return RedirectToAction("Login", "Account");
    }

Таким образом, оба действия выполняются, но сайты не изменяются в соответствующее представление. Он остается на исходном изображении, где была нажата кнопка.

как я могу перейти к соответствующему виду действия?

Теги:
asp.net-mvc

1 ответ

2
Лучший ответ

Вызов AJAX не может сделать переадресацию браузера по умолчанию. Вместо перенаправления на сервере отправьте URL-адрес как JSonResult и используя JQuery на стороне клиента, поймайте этот URL-адрес и выполните перенаправление, как показано ниже:

Пусть действие вашего контроллера возвращает Json, как показано ниже -

    public ActionResult GetJson()
    {
        return new JsonResult() { Data = "http://www.google.com",JsonRequestBehavior = JsonRequestBehavior.AllowGet };
    }

Затем вызовите это действие контроллера из JQuery, как показано ниже:

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
    function submitForm() {
        jQuery.ajax({
            type: "POST",
            url: "@Url.Action("GetJson")",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                window.location.href = data;
            },
            failure: function (errMsg) {
                alert(errMsg);
            }
        });
    }
</script>

<input type="button" value="Click" onclick="submitForm()" />

Поэтому, когда вы нажимаете кнопку, будет выполняться операция POST для действия контроллера, а возвращаемый URL-адрес будет зависеть от функции Success. Затем, используя window.location.href, мы делаем перенаправление браузера.

РЕДАКТИРОВАТЬ

Один из способов построения URL -

UrlHelper h = new UrlHelper(ControllerContext.HttpContext.Request.RequestContext);
string str = h.Action("action", "controller", null);
return new JsonResult() { Data = str,JsonRequestBehavior = JsonRequestBehavior.AllowGet };

В качестве альтернативы в то же время вы можете использовать класс Uri в С#

  • 0
    Спасибо за ваш ответ, но есть какой-то метод для создания URL в контроллере без указания строки url? Я имею в виду, что, передавая действие и контроллер, метод создает URL, и я могу поместить в него параметры.
  • 0
    @ggui, проверь мой ответ edit.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню