【问题标题】:ASP.Net MVC Ajax call that returns JsonResult返回 JsonResult 的 ASP.Net MVC Ajax 调用
【发布时间】:2009-01-30 21:19:12
【问题描述】:

我开始学习 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 方法。

有没有办法做到这一点?

【问题讨论】:

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


    【解决方案1】:

    您是否在视图页面中同时包含了 MicrosoftAjax.js 和 MicrosoftMvcAjax.js javascript 文件?在我看来,它实际上是在发布表单而不是使用 Ajax。当我缺少 MicrosoftAjax.js 包含时,我遇到了这个问题,因为 Ajax 回发由于缺少 javascript 类而失败,因此它调用了正常的表单发布。

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

    【讨论】:

    • 看来你是对的!我假设我使用的 Ajax 辅助方法会自动将任何需要的 javascript 文件添加到响应中。嗬!谢谢。
    猜你喜欢
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多