Метод действия вызывается, но возвращает неверный вид. - PullRequest
0 голосов
/ 13 марта 2012

У меня есть контроллер с именем BearController. В нем у меня есть один метод действия индекса и другой метод действия.

public ActionResult EditBear(int bearId)
{
    ...
    return View();
}

Вот как я называю это с точки зрения метода индекса:

$.ajax({ url: "Bear/EditBear", data: { bearId: 2} })

Метод вызывается, точка останова проходит через конец EditBear, и после этого в моем браузере я получаю представление из метода index. URL-адрес в браузере - это URL-адрес метода индекса (что означает только localhost и controllerName).

Я также пытался с:

$.get('@Url.Action("EditBear", "Bear")', { bearId: 2});

и метод даже не вызывается. В чем проблема?

Ответы [ 3 ]

0 голосов
/ 13 марта 2012

Ну, во-первых, я бы не назвал метод "EditBear". Поскольку он есть в BearController, я бы назвал его Edit. Это делает URL / Bear / Edit / 1 вместо /Bear/EditBear/1.

Во-вторых, вы вызываете метод Edit через AJAX, поэтому представление возвращается как ответ на вызов AJAX. Вы можете проверить это, используя Fiddler или Firebug.

Я думаю, что вам нужен простой вызов с использованием @ Url.Action, без использования Javascript. Просто вставьте ссылку в ваш HTML (таблица?), Используя Razor.

<td>
@Url.Action("Edit", "Bear", new { id = 2 });
</td>
0 голосов
/ 17 мая 2012

Как кажется, если вы вызываете метод действия с Ajax, представление как-то не отображается.Мне пришлось использовать window.location.href, чтобы получить правильное представление.

0 голосов
/ 13 марта 2012

Полагаю, вы хотите получить объект Bear с идентификатором 2 (или что бы вы ни передавали. Но похоже, что в вашем методе действия вы возвращаете View только без какого-либо объекта, переданного в качестве параметра ему.Я думаю, он вернет пустое представление для клиента.

Возможно, вы захотите отправить заполненный объект обратно.

public ActionResult EditBear(int bearId)
{
    BearViewModel objVM=new BearViewModel(bearId); // Load the ViewModel
    return View(objVM);
}

и в вашем представлении

@model BearViewModel
<b>Edit Bear</b>
@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.BearName)
    @Html.HiddenFor(m=>m.BearId)
     <p>
        <input type="submit" value="Save" />
     </p>
}

Поскольку это вызов ajax, вам, вероятно, следует подумать о возвращении частичного представления.

public ActionResult EditBear(int bearId)
{
    BearViewModel objVM=new BearViewModel(bearId); // Load the ViewModel
    if (Request.IsAjaxRequest())
     {
       return View("Partial/EditBear", objVM);
     }
    return View(objVM);
}

Предполагая, что у вас есть частичное представление в подпапке "Partials" в папке Bear View

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