Вызов действия MVC с JQuery AJAX, который не возвращает Json (вместо этого другое представление) - PullRequest
4 голосов
/ 03 января 2011

Итак, в моем контроллере есть MVC-действие

public System.Web.Mvc.ActionResult Link(LinkType type)
        {
            switch (type)
            {
                case LinkType.IC:
                    return RedirectToAction("Indication", "IndicationsController");
                    break;
                case LinkType.Pricing:
                    break;
                case LinkType.Sheets:
                    break;
                case LinkType.Analysis:
                    break;
                case LinkType.Admin:
                    break;
                default : 
                    break;
            }

            return View(@"~\Views\Indications\ShowAString.aspx", "", "Page is not available for selection.");
        }

Я хочу вызвать это действие из JQuery, передавая целочисленное значение нажатой кнопки.Таким образом, у меня есть это в моем методе нажатия кнопки:

$('#btnIc').live('click', function () {
        var typeJSON = {};
        typeJSON["type"] = 1;
        $.ajax({
            type: "POST",
            url: "<%= Url.Action("Link", "Home") %> ",
            dataType: "jsonData",
            data: typeJSON,
            success: function(data) {

            }
        });
    });

Будет ли это перенаправить страницу или будет ждать, когда я что-то сделаю с (данными)?

Это правильный путьсделать это?

Ответы [ 3 ]

4 голосов
/ 03 января 2011

Возвращение всего представления в AJAX-запросе почти всегда не подходит. Вместо этого вы хотите вернуть XML, JSON или кусок HTML. Вы можете вернуть кусок HTML, вернув часть, вызвав PartialView() в контроллере.

Если вы возвращаете HTML, то ваш JJuery AJAX-запрос должен ожидать его, поэтому измените его dataType на html. Затем в обратном вызове jQuery вы можете просто взять полученный HTML-код и добавить его на свою страницу.

ПРИМЕЧАНИЕ: вы можете использовать Request.IsAjaxRequest() для возврата либо данных AJAX, либо полного просмотра, а также использовать одно и то же действие для обоих типов запросов. Это помогает с прогрессивным улучшением.

2 голосов
/ 03 января 2011

Почему бы просто не сделать

public ActionResult Link(LinkType type)
{
  var obj = ...; //Object that you get from the LinkType. Whatever ShowAString returns.
  return Json(obj);
}
1 голос
/ 03 января 2011

Вы не возвращаете json, похоже, вы перенаправляете на другое действие, которое может возвращать представление. Вам нужно будет установить тип действия на JsonResult и вернуть туда свой объект json.

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