загрузить новый вид из ASP, используя MVC

0

Хорошо, так что ситуация в том, что я на своей индексной странице. У меня есть событие jQuery onClick следующим образом:

$('#example').on('click', 'tr', function (e) {
    var aData = oTable.fnGetData(this);
    showCampaign(aData);
});

Я проверил, что эта функция работает так, как предполагалось, и aData завершается заполнением массивом, содержащим данные из каждой ячейки в строке таблицы, которая будет нажата.

То, что мне нужно сделать, - это когда этот клик даже происходит, снимает aData с моим MVC и загружает новое представление, которое я могу заполнить этими данными. Это то, что я сейчас пытаюсь...

function showCampaign(aData) {
    $.ajax({
        type: "POST" ,
        url: "Test/Show",
        data : aData
   }).done(function (response) {
        window.location.href = response.Url;
   }).error(function (jqxhr, textstatus, errorthrown) {
        alert("didn't work");
   });
};

Эта функция работает до точки... она отправляет запрос на мой MVC... но я не вижу, как данные проходят (нулевой), и когда я возвращаю строку ответа, страница не загружается.

Метод в моем классе контроллера выглядит следующим образом:

[HttpPost]
public ActionResult ShowCampaign(String[] aData)
{
   var redirectUrl = new UrlHelper(Request.RequestContext).Action("TestView","Test");
   return Json(new {Url : redirectUrl });
}

Для целей вышеуказанного TestView - это имя View, которое я хочу загрузить, а Test - это контроллер.

Что я делаю неправильно здесь.. Я пытаюсь понять MVC, но я просто еще не получил его... свет не нажал.

Теги:
asp.net-mvc
views
controller

1 ответ

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

Проблема здесь в том, что вы не называете параметр. Если вы говорите, что aData - это массив, вы должны обернуть его в объект. Свойство должно соответствовать имени параметра метода контроллера.

function showCampaign(aData) {
$.ajax({
    type: "POST" ,
    url: "Test/ShowCampaign",
    data: { aData: aData }
}).done(function (response) {
    window.location.href = response.Url;
}).error(function (jqxhr, textstatus, errorthrown) {
    alert("didn't work");
   });
};

Еще один совет, который вам может пригодиться. Вы можете использовать Url.Action() для создания своих URL-адресов. http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action(v=vs.108).aspx

  • 0
    Я инкапсулировал данные в объект, как вы предложили, и он отлично работает. В этот момент я получаю ответ URL, и он пытается перенаправить, как я ожидал ..... но он говорит, что ресурс не может быть найден, URL-адрес, который предоставляется, является localhost: "port" / Test / TestView. Я проверил что в обозревателе решений, что мои index.aspx и TestView.aspx находятся в папке Test в Views ... Что мне не хватает
  • 0
    У вас есть контроллер с именем TestController в вашем проекте?
Показать ещё 9 комментариев

Ещё вопросы

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