如何使用带有JSON结果的Ajax.BeginForm MVC助手?

时间:2008-11-20 03:25:25

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

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

这样可行,但我想要的结果应该作为JSON返回。不幸的是,框架只是将数据视为字符串。以下是客户端代码。服务器代码只返回一个带有一个字段UppercaseName的JsonResult。

<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表单库。

5 个答案:

答案 0 :(得分:23)

您可以使用OnFailureOnSuccess代替OnComplete; OnSuccess为您提供适当的JSON对象数据。您可以在~/Scripts/jquery.unobtrusive-ajax.min.js中找到要加载到页面上的回调方法签名。

Ajax.BeginForm

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

脚本块:

<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进行了测试。

答案 1 :(得分:12)

试试这个:

var json_data = content.get_response().get_object();

这将为您提供JSON格式的结果,您可以使用json_data[0]获取第一条记录

答案 2 :(得分:0)

尝试使用以下代码:

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

答案 3 :(得分:0)

我用:

    function onTestComplete(data, status, xhr) {
       var data2 = JSON.parse(data.responseText);
       //data2 is your object
    }

答案 4 :(得分:-1)

确保您已包含MicrosoftAjax.js和MicrosoftMvcAjax.js。然后对返回的上下文使用以下调用以从返回中获取json对象。

var json = context.get_data();
var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);