ASP.Net MVC Ajax вызов, который возвращает JsonResult - PullRequest
3 голосов
/ 31 января 2009

Я начинаю изучать ASP.Net MVC (релиз-кандидат), и у меня возникли небольшие проблемы. Возможно, я просто привередлива, но я подумала, что спрошу.

Я хочу использовать встроенные (расширенные) методы ASP.Net Ajax для вызова моего контроллера, называемого «GetNames», который возвращает объект JsonResult. Я видел примеры, в которых используется метод jQuery $ .getJSON (), но вместо этого я бы предпочел сделать что-то вроде этого:

 <%using ( Ajax.BeginForm("GetNames", new AjaxOptions() { OnSuccess = "GetNamesSuccess", OnBegin = "GetNamesBegin", OnComplete = "GetNamesComplte", OnFailure = "GetNamesFailure" } ) ) { %>

    <%=Html.TextBox("DummyData") %>
    <input type=submit />

<% } %>

<script type="text/javascript">
    function GetNamesSuccess()
    {
        alert("Success");
    }

    function GetNamesBegin()
    {
        alert("Begin");
    }

    function GetNamesComplete()
    {
        alert("Complete");   
    }

    function GetNamesFailure()
    {
        alert("Failure");
    }        
</script>

Когда я нажимаю кнопку «Отправить», я не получаю ни одного из предупреждений и мне предлагается загрузить файл, содержащий текст объекта Json, который, как я считаю, указывает, что, по крайней мере, метод контроллера работает нормально. Но это не то, что мне нужно ... В идеале Ajax.BeginForm настроил бы его так, чтобы объект Json передавался либо в метод OnSuccess, либо в метод OnComplete.

Есть ли способ сделать это?

1 Ответ

4 голосов
/ 31 января 2009

Включили ли вы файлы javascript MicrosoftAjax.js и MicrosoftMvcAjax.js на страницу просмотра? Для меня это звучит так, будто на самом деле публикует форму, а не использует Ajax. У меня была эта проблема, когда я пропускал файл MicrosoftAjax.js, потому что постбэк Ajax не удался из-за отсутствия классов javascript и, таким образом, он вызывал обычную форму сообщения.

В связанной заметке вы должны проверить, является ли запрос Ajax или нет в контроллере, и вернуть ViewResult (или Redirect) вместо Json, если это не так. Если у кого-то отключен JavaScript или у вас есть ошибки на вашей странице, вы хотите, чтобы он изящно ухудшался и обрабатывал его как обычный постбэк, а не возвращал Json.

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