2009-01-30 15 views
3

Я начинаю изучать ASP.Net MVC (кандидат на выпуск), и у меня небольшие проблемы. Я мог бы просто быть разборчивым, но я думал, что спрошу.ASP.Net MVC Ajax вызов, который возвращает JsonResult

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

<%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> 

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

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

ответ

4

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

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

+0

Похоже, вы правы! Я предположил, что методы помощника Ajax, которые я использовал, автоматически добавят в ответ любые необходимые файлы javascript. Doh! Благодарю. – Moskie

Смежные вопросы