Ajax.BeginForm говорит, что действие не существует, однако оно существует - PullRequest
0 голосов
/ 30 сентября 2011

Я работаю с помощью метода AJAX Helper в одном из моих приложений, все было хорошо и правильно, но внезапно я столкнулся с этой странной проблемой, т. Е. В поле зрения

    <% using (Ajax.BeginForm("Feedback", "User", new AjaxOptions { InsertionMode = InsertionMode.InsertBefore, HttpMethod = "POST", OnFailure = "searchFailed", OnSuccess = "feedbackRecorded", LoadingElementId = "ajax-loader-fb", UpdateTargetId = "newsletter", }, new { @id = "feedback" })) { %>

Первый параметр Ajax.BeginForm, который является {имя действия}, теперь помечается красным цветом (я использую Resharper) и говорит, что «не может разрешить действие« ActionName »», однако в моем контроллере присутствует действие .

Другая странная вещь заключается в том, что при запуске приложения и отправке формы он в конечном итоге вызывает метод Javscript «OnSuccess», как если бы это было успешно, но на самом деле ничего не произошло, и он даже не дошел до вызова первой строки указанного действие контроллеров. (Это происходит с обеими AJAX-формами в представлении)

Есть ли у кого-нибудь идеи о возможных причинах такого неожиданного поведения?

Thankyou!

Я только что создал новый контроллер 'SharedController' с тем же действием в нем, и теперь он распознает, но его не распознает в UserController?

      public class SharedController : Controller
    {
            public ActionResult Feedback()
            {
                    throw new NotImplementedException();
            }
    }

Ответы [ 3 ]

3 голосов
/ 01 октября 2011

Maven, про ReSharper - жалуется правильно, потому что вы используете этот метод перегрузки

public static MvcForm BeginForm(
    this AjaxHelper ajaxHelper,
    string actionName,
    Object routeValues,
    AjaxOptions ajaxOptions,
    Object htmlAttributes)

где вторым параметром является routeValues, поэтому ReSharper ищет действие 'Feeeback' в текущем контроллере.

Очевидно, вы хотели еще одну перегрузку с этим вызовом

<% using (Ajax.BeginForm("Feedback", "User", null, new AjaxOptions { InsertionMode =  InsertionMode.InsertBefore, HttpMethod = "POST", OnFailure = "searchFailed", OnSuccess = "feedbackRecorded", LoadingElementId = "ajax-loader-fb", UpdateTargetId = "newsletter", }, new { @id = "feedback" })) { %>

Обратите внимание на третий нулевой аргумент.

1 голос
/ 01 октября 2011

Второй параметр Ajax.BeginForm - это имя контроллера.

Попробуйте изменить код на:

<% using (Ajax.BeginForm("Feedback", "Shared", ...
0 голосов
/ 30 сентября 2011

Что касается запуска Javascript первым, это может быть связано с этим сообщением:

Asp.NET MVC AjaxOptions OnSuccess срабатывает .. слишком рано?

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

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