Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法将JSON结果传递回视图_Javascript_Asp.net Mvc_Json_Asp.net Mvc 5 - Fatal编程技术网

Javascript 无法将JSON结果传递回视图

Javascript 无法将JSON结果传递回视图,javascript,asp.net-mvc,json,asp.net-mvc-5,Javascript,Asp.net Mvc,Json,Asp.net Mvc 5,我有下面的HTML来显示一些消息 ... <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <span id="fail_message" class="label label-danger"></span> <span id="success_message" class="label label-success">

我有下面的HTML来显示一些消息

...
<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <span id="fail_message" class="label label-danger"></span>
        <span id="success_message" class="label label-success"></span>
    </div>
</div>
<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="button" value="Invite User" class="btn btn-primary"/>
    </div>
</div>
...
。。。
...
按下按钮时激发的脚本为

<script>
    $(function () {
        $("input[type=button]").click(function () {
            var data_email = $('#email').val();
            var data_product = $('#product option:selected').text();
            $.ajax({
                url: 'Tools/SendInvite',
                type: 'POST',
                data: { email: data_email, product: data_product },
                success: function (result_success, result_failure) {
                    $('#fail_message').val(result_failure);
                    $('#success_message').val(result_success);
                }
            });
        });
    });
</script>

$(函数(){
$(“输入[类型=按钮]”)。单击(函数(){
var data_email=$('#email').val();
var data_product=$(“#产品选项:选定”).text();
$.ajax({
url:“工具/发送邀请”,
键入:“POST”,
数据:{email:data\u email,product:data\u product},
成功:功能(结果成功,结果失败){
$('fail_message').val(result_failure);
$('success_message').val(result_success);
}
});
});
});
那么在我的控制器里我有

[AllowAnonymous]
public async Task<ActionResult> SendInvite(
    string email, string product)
{
    // Check if admin.
    ApplicationUser user = null;
    if (ModelState.IsValid)
    {
        user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
        if (user.IsAdmin != null && (bool)user.IsAdmin)
        {
            string key = String.Empty;
            string subMsg = String.Empty;
            var accessDB = new AccessHashesDbContext();
            switch (product) { /* do stuff */ }

            // Send email.
            try
            {
                await Helpers.SendEmailAsync(new List<string>() { email }, null, "my msg string" );
                result = String.Format("Invitation successfully sent to \"{0}\"", email);
                return Json(new {
                        result_success = result,
                        result_failure = String.Empty
                    },
                    JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                result = String.Format("Invitation to \"{0}\" failed", email);
                return Json(new {
                        result_success = String.Empty,
                        result_failure = result
                    },
                    JsonRequestBehavior.AllowGet);
            }
        }
    }
    return Json(new {
            result_success = String.Empty,
            result_failure ="Invite Failure"
        },
        JsonRequestBehavior.AllowGet);
}
[AllowAnonymous]
公共异步任务

  • 但是这些对我没有帮助。

    用以下方法改变你的成功方法

    success: function (result) {
        $('#fail_message').html(result.result_failure);
        $('#success_message').html(result.result_success);
    }
    

    服务器返回一个json对象。

    使用以下命令更改成功方法

    success: function (result) {
        $('#fail_message').html(result.result_failure);
        $('#success_message').html(result.result_success);
    }
    

    服务器返回一个json对象。

    尝试将ajax成功处理程序更改为

      function (result) {
           $('#fail_message').html(result.result_failure);
           $('#success_message').html(result.result_success);
       }
    

    处理程序应该接收一个JSON对象,该对象具有您在操作中指定的两个属性。

    尝试将ajax成功处理程序更改为类似的属性

      function (result) {
           $('#fail_message').html(result.result_failure);
           $('#success_message').html(result.result_success);
       }
    
    $('#fail_message').html(result.result_failure);
    $('#success_message').html(result.result_success);
    
    处理程序应该接收一个JSON对象,该对象具有您在操作中指定的两个属性。

    您必须使用此属性

    $('#fail_message').html(result.result_failure);
    $('#success_message').html(result.result_success);
    
    <script>
        $(function () {
            $("input[type=button]").click(function () {
                var data_email = $('#email').val();
                var data_product = $('#product option:selected').text();
                $.ajax({
                    url: 'Tools/SendInvite',
                    type: 'POST',
                    data: { email: data_email, product: data_product },
                    success: function (result) {
                             $('#fail_message').html(result.result_failure);
                             $('#success_message').html(result.result_success);
                    }
                });
            });
        });
    </script>
    
    
    $(函数(){
    $(“输入[类型=按钮]”)。单击(函数(){
    var data_email=$('#email').val();
    var data_product=$(“#产品选项:选定”).text();
    $.ajax({
    url:“工具/发送邀请”,
    键入:“POST”,
    数据:{email:data\u email,product:data\u product},
    成功:功能(结果){
    $('#fail_message').html(result.result_failure);
    $('success_message').html(result.result_success);
    }
    });
    });
    });
    
    您必须使用此

    <script>
        $(function () {
            $("input[type=button]").click(function () {
                var data_email = $('#email').val();
                var data_product = $('#product option:selected').text();
                $.ajax({
                    url: 'Tools/SendInvite',
                    type: 'POST',
                    data: { email: data_email, product: data_product },
                    success: function (result) {
                             $('#fail_message').html(result.result_failure);
                             $('#success_message').html(result.result_success);
                    }
                });
            });
        });
    </script>
    
    
    $(函数(){
    $(“输入[类型=按钮]”)。单击(函数(){
    var data_email=$('#email').val();
    var data_product=$(“#产品选项:选定”).text();
    $.ajax({
    url:“工具/发送邀请”,
    键入:“POST”,
    数据:{email:data\u email,product:data\u product},
    成功:功能(结果){
    $('#fail_message').html(result.result_failure);
    $('success_message').html(result.result_success);
    }
    });
    });
    });
    
    JavaScript需要如下:

    <script>
        $(function () {
            $("input[type=button]").click(function () {
                var data_email = $('#email').val();
                var data_product = $('#product option:selected').text();
                $.ajax({
                    url: 'Tools/SendInvite',
                    type: 'POST',
                    data: { email: data_email, product: data_product },
                    success: function (result) {
                        $('#fail_message').html(result.result_failure);
                        $('#success_message').html(result.result_success);
                    }
                });
            });
        });
    </script>
    
    您创建了一个新对象:
    new{}
    然后将其与一些字段合并。因此,当它被发送回页面时,将有一个具有两个属性的对象(
    result
    )。显然,返回的对象不是调用
    result
    ,而是在函数上下文中为其指定的名称

    最后,因为您使用的是
    returnjson
    ,所以还应该确保您的操作方法返回类型
    JsonResult
    而不是
    ActionResult
    。在后台,ASP.NET团队扩展了
    ActionResult
    ,但他们还设置了一些属性,如内容类型,以确保网页知道如何处理响应。它还使用JavaScript序列化器来正确序列化对象。参考:

    公共异步任务SendInvite(
    字符串(电子邮件、字符串产品)
    {
    

    如果您想使用newtonsoft JSON.net,我将创建实现它的自定义结果。

    JavaScript需要如下:

    <script>
        $(function () {
            $("input[type=button]").click(function () {
                var data_email = $('#email').val();
                var data_product = $('#product option:selected').text();
                $.ajax({
                    url: 'Tools/SendInvite',
                    type: 'POST',
                    data: { email: data_email, product: data_product },
                    success: function (result) {
                        $('#fail_message').html(result.result_failure);
                        $('#success_message').html(result.result_success);
                    }
                });
            });
        });
    </script>
    
    您创建了一个新对象:
    new{}
    然后将其与一些字段合并。因此,当它被发送回页面时,将有一个对象(
    result
    )具有两个属性。显然,返回的对象不被称为
    result
    ,但这是在函数上下文中为它指定的名称

    最后,因为您使用的是
    return Json
    ,所以还应该确保您的操作方法返回类型
    JsonResult
    而不是
    ActionResult
    。在后台ASP.NET团队扩展了
    ActionResult
    ,但他们还设置了一些属性,如内容类型,以确保web页面知道如何处理响应。它还使用JavaScript序列化程序正确序列化对象。参考:

    公共异步任务SendInvite(
    字符串(电子邮件、字符串产品)
    {
    

    如果您想使用newtonsoft JSON.net,我会创建实现它的自定义结果。

    我相信当您使用
    JSON(新的{a=1,b=1})
    时,javascript函数处理程序应该是
    function(data){var a=data.a;var b=data.b}
    。也就是说,js处理程序应该只有一个参数。尝试执行
    console.log(result_success);
    在你的处理程序中查看你真正得到了什么,感谢大家的回答。你所有的时间都非常感谢……我相信当你做
    Json(新的{a=1,b=1})
    时,javascript函数处理程序应该是
    函数(数据){var a=data.a;var b=data.b}
    。也就是说,js处理程序应该只有一个参数。请尝试执行
    console.log(result\u success)
    在你的处理程序中查看你真正得到了什么感谢大家的回答。非常感谢你所有的时间…是的,绝对同意这一点,但是,你是否也可以指出,你应该返回
    JsonResult
    而不是
    ActionResult
    …是的,绝对同意这一点,但是,您是否可以指出,您应该返回
    JsonResult
    ,而不是
    ActionResult
    …这将不起作用,因为success函数只有一个对象作为参数,而不是两个!这将不起作用,因为success函数