Не могу заставить его работать Ajax с MVC 3 - PullRequest
1 голос
/ 25 декабря 2010

Это мой метод Контроллера

    [HttpPost]
    public ActionResult RemoveValue()
    {

        return View();

    }

И вот как я пытаюсь получить доступ к методу

@Ajax.ActionLink("Asenkron process", "RemoveValue")

Но если я удалю атрибут HttpPost, он будет работать.

Я проверял это на MVC 3 RC 2

Ответы [ 2 ]

0 голосов
/ 17 января 2011

Может быть Ajax.BeginForm вокруг него?

@ using (Ajax.BeginForm (new AjaxOptions {UpdateTargetId = "resultDiv", HttpMethod = "Get"})) { }

0 голосов
/ 25 декабря 2010

Атрибут [HttpPost] означает, что этот метод доступен только через запрос POST. Если вы посмотрите на запрос в Firebug или что-то подобное, вы увидите, что запрос выполняется, и в ответ получите ошибку 500.

Если вы хотите, чтобы ссылка выполняла POST, измените ее на:

@Ajax.ActionLink("Asenkron process", "RemoveValue", new AjaxOptions {HttpMethod="POST"})

EDIT

При дальнейшем чтении документов Ajax.ActionLink ничего не делает с полученным результатом, если вы не укажете что-либо для него. По умолчанию он также выполняет POST, поэтому AjaxOptions не нужен. Если вы хотите отобразить содержимое того, что находится в представлении RemoveValue, вам нужно сделать что-то вроде следующего:

@Ajax.ActionLink("Text","RemoveValue", new AjaxOptions {UpdateTargetId="resultDiv" })
<div id="resultDiv">
</div>

Содержимое resultDiv будет тем, что возвращается из действия.

Если вам нужно какое-то подтверждение:

<script>
  function onSuccess()
  {
    alert("Success!");
  }

  function onFailure()
  {
    alert("Failed!");
  }
</script>
@Ajax.ActionLink("Text","RemoveValue", new AjaxOptions {OnSuccess="onSuccess", OnFailure="onFailure" })

Это, конечно, при условии, что вы хотите асинхронный запрос. Если вам нужен обычный синхронный POST, когда браузер переходит на новую страницу, выполните что-то вроде этого:

using(Html.BeginForm("ActionName","ControllerName",FormMethod.Post))
{
  <input type="submit" value="Delete" />
}

Если вы сделаете это, действие, которое вы отправите, должно завершиться return RedirectToAction("AnotherAction");. Затем браузер отправит запрос GET на AnotherAction. Это предотвращает дублирование действий, когда пользователь нажимает кнопку «Назад» и в браузерах появляется всплывающее окно «Данные должны быть повторно отправлены на страницу».

Надеюсь, это немного более полезно.

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