返回JsonResult的ASP.Net MVC Ajax调用

时间:2009-01-30 21:19:12

标签: asp.net-mvc asp.net-ajax

我开始学习ASP.Net MVC(候选版本),我遇到了一些麻烦。我可能只是挑剔,但我想我会问。

我想使用内置(扩展)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>

当我单击“提交”按钮时,我没有收到任何警报,并且系统提示我下载包含Json对象文本的文件,我相信这表明至少控制器方法工作正常。但这对我来说不是预期的行为......理想情况下,Ajax.BeginForm会将其设置为Json对象将传递给OnSuccess或OnComplete方法。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:4)

您是否在视图页面中包含了MicrosoftAjax.js和MicrosoftMvcAjax.js javascript文件?听起来我觉得它实际上是在发布表单而不是使用Ajax。我错过了MicrosoftAjax.js包含这个问题因为Ajax回发因为缺少javascript类而失败,因此它调用了正常的表单帖子。

在相关的说明中,您应该在控制器中检查请求是否是Ajax,如果不是,则返回ViewResult(或Redirect)而不是Json。如果有人关闭了javascript或者你的页面上有错误,你希望它优雅地降级并将其作为正常的回发处理而不是返回Json。