ASP.Net MVC Ajax调用返回JsonResult

3

我开始学习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个回答

4
你是否在视图页面中同时包含了MicrosoftAjax.js和MicrosoftMvcAjax.js这两个javascript文件?如果没有,那么它实际上是提交表单而不是使用Ajax。我曾经遇到过这个问题,因为缺少MicrosoftAjax.js,导致Ajax回传失败,从而触发了常规表单提交。
另外,你应该在控制器中检查请求是否为Ajax,如果不是,则返回ViewResult(或Redirect),而不是Json。如果某些人关闭了javascript或者你的页面出现了错误,你希望它可以优雅地退化并作为正常的表单提交处理,而不是返回Json。

看起来你是对的!我假设我使用的Ajax助手方法会自动将任何需要的JavaScript文件添加到响应中。哎呀!谢谢。 - Moskie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接