javascript - 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?

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

我正在尝试使用 ASP.NET MVC Ajax.BeginForm 帮助程序,但不想在调用完成时使用现有的内容插入选项。相反,我想使用自定义 JavaScript 函数作为回调。

这可行,但我想要的结果应该以 JSON 形式返回。不幸的是,该框架仅将数据视为字符串。下面是客户端代码。服务器代码仅返回一个 JsonResult,其中包含一个字段 UppercaseName。

<script type='text/javascript'>
    function onTestComplete(content) {
        var result = content.get_data();
        alert(result.UppercaseName);
    }
</script>

<% using (Ajax.BeginForm("JsonTest", new AjaxOptions() {OnComplete = "onTestComplete" })) { %>
    <%= Html.TextBox("name") %><br />
    <input type="submit" />
<%} %>

它不显示大写结果,而是显示未定义。 content.get_data() 似乎保存 JSON,但仅以字符串形式。我该如何将其转换为对象?

所有这一切看起来确实有点令人费解。有没有更好的方法来使用 Ajax.BeginForm 获取结果内容?如果这么难,我可能会完全跳过 Ajax.BeginForm,只使用 jQuery 表单库。

最佳答案

您可以使用OnFailureOnSuccess代替OnCompleteOnSuccess 为您提供正确的 JSON 对象形式的数据。您可以在 ~/Scripts/jquery.unobtrusive-ajax.min.js 中找到回调方法签名,您应该将其加载到页面上。

在您的Ajax.BeginForm中:

new AjaxOptions
    {
        OnFailure = "onTestFailure",
        OnSuccess = "onTestSuccess"
    }

脚本 block :

<script>
//<![CDATA[

    function onTestFailure(xhr, status, error) {

        console.log("Ajax form submission", "onTestFailure");
        console.log("xhr", xhr);
        console.log("status", status);
        console.log("error", error);

        // TODO: make me pretty
        alert(error);
    }

    function onTestSuccess(data, status, xhr) {

        console.log("Ajax form submission", "onTestSuccess");
        console.log("data", data);
        console.log("status", status);
        console.log("xhr", xhr);

        // Here's where you use the JSON object
        //doSomethingUseful(data);
    }

//]]>
</script>

这些签名匹配 success and error callbacks in $.ajax(...) ,这可能并不令人意外。

这是使用 进行测试的与 1.6.3和1.7.2。

关于javascript - 如何将 Ajax.BeginForm MVC 助手与 JSON 结果一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/304233/

相关文章:

javascript - Angular Directive(指令)范围为空

c# - Web API 反序列化正在将 int 转换为字符串,我该如何防止呢?

c# - 如何找到 Controller 操作的绝对路径?

c# - MVC - 我可以通过 2 个不同的 Controller 在 1 个 View 上显示标题和消息吗?

c# - asp.net url 路由器与 ajax webservice 路径冲突

asp.net-ajax - ASP.Net AJAX UpdatePanel 无法触发 SelectedIndexChanged 事件

javascript - 检查 var 中是否有 "cheese"或 "cake"?

javascript - 仅当设置为全屏模式时,如何防止 jwplayer5 视频上的播放和暂停点击操作?

javascript - jquery切换不会在点击时关闭

c# - 使用 jQuery 在 ASP.NET 中进行 AJAX 回调