【问题标题】:C# MVC Ajax call returns undefinedC# MVC Ajax 调用返回未定义
【发布时间】:2019-08-14 12:21:15
【问题描述】:

我是 ajax 新手,正在尝试将用户名值发送给 Answer 函数,然后将其返回给视图,但无论我尝试什么,我都无法定义。

//来自 HomeController.cs 的应答函数

        [HttpPost]
       public string Answer(string userName)
       {


            return userName;
        }

//视图中的ajax调用

        $.ajax({
        type: "POST",
        url: "/Home/Answer",
        contentType: "application/json; charset=utf-8",
        data: '{"userName":"' + message + '"}',
        dataType: "html",
        success: function (result, status, xhr) {
            alert(message);

            outputArea.append(`
      <div class='user-message'>
        <div class='message'>
          ${result}
        </div>
      </div>
    `);
        },
        error: function (xhr, status, error) {
            alert("Something went wrong");
        }
    });

【问题讨论】:

  • 查看[FromBody]
  • 1 您是否在Answer 中设置了断点。是否被调用并且参数是否正确? 2 警报中的message 未定义。
  • OT data: '{"userName":"' + message + '"}' 不要手动形成 JSON,如果 message 中的任何地方有 ",这将中断。请改用data: {"userName":message}data: JSON.stringify({"userName":message})

标签: c# jquery asp.net-mvc


【解决方案1】:

具体到你的情况,你可以参考这段代码sn-p来获取你需要的数据:

<script>


//Now generate your JSON data here to be sent to the server
  var json = {
              messageVariable: message
             };

//Send the JSON data via AJAX to your Controller method
    $.ajax({
        url: '@Url.Action("Answer", "Home")',
        type: 'post',
        dataType: "json",
        data: { "json": JSON.stringify(json)},
        success: function (result) {
                  console.log(result);
        },
        error: function (error) {
             console.log(error)
        }
      });
</script>

你的控制器看起来像:

using System.Web.Script.Serialization;

[HttpPost]
public ActionResult Answer(string json)
{

        var serializer = new JavaScriptSerializer();
        dynamic jsondata = serializer.Deserialize(json, typeof(object));

        //Get your variables here from AJAX call
        var message= jsondata["messageVariable"];

        //Do something with your variables here.

    return Json(new { success = true, messageVariable }, JsonRequestBehavior.AllowGet);
}

【讨论】:

    【解决方案2】:

    按照@Stuart 在 cmets 中告诉您的有关将 FromBody 属性添加为:

    [HttpPost]
    public string Answer([FromBody] string userName)
    {
       return userName;
    }
    

    或使用 data: JSON.parse('{"userName":"' + message + '"}') 到您的 json。

    【讨论】:

    • 两个都试了还是没有结果
    • 这听起来很疯狂,但试试data: '=' + '{"userName":"' + message + '"}',当我在没有在json 之前添加等号的情况下发布时,我曾经遇到过很多关于json 字符串的问题...
    • 是,但 System.Web.Script.Serialization 空间名有问题
    • @DhiaTr 这很容易解决。您可以从 Visual Studio 中的添加引用手动添加引用。您可以参考此链接添加参考:stackoverflow.com/questions/1156313/…
    • 在添加库时遇到了一些问题,经过研究发现这是 vs19 中的问题,否则当我更改为 vs15 时所有代码都可以正常工作
    猜你喜欢
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多