【问题标题】:Sending data to MVC Controller with AJAX使用 AJAX 向 MVC 控制器发送数据
【发布时间】:2019-05-02 11:35:23
【问题描述】:

我正在尝试使用 AJAX 向 MVC 控制器方法发送数据,但我不知道我做错了什么。

这里是 AJAX 调用

$.ajax({
    type: 'POST',
    url: invokingControllerActionUrl,
    data: "it is just a simple string",
    success: function (data) {
        window.location.href = link;
    }
});

这里是控制器方法。它被调用,但参数始终为空。

public IActionResult OnPostTest([FromBody] string stringValue)
{
    // stringValue is always null :(
}

【问题讨论】:

    标签: ajax asp.net-core-mvc


    【解决方案1】:

    把你的ajax调用改成这个

    $.ajax({
        type: 'POST',
        url: invokingControllerActionUrl, // Confirm the Path in this variable Otherwise use @Url.Action("OnPostTest", "InvokingController")
        data: {stringValue: "it is just a simple string"},
        success: function (data) {
            window.location.href = link;
        }
    });
    

    并删除 [FromBody]。也最好定义类型帖子。不过没必要

    [HttpPost]
    public IActionResult OnPostTest( string stringValue)
    {
        // stringValue is always null :(
    }
    

    【讨论】:

      【解决方案2】:

      根据您从 JS 发送的 Content-Type 的内容,您可能需要将字符串正确编码为表单值

      ...
      data: 'stringValue="it is just a simple string"',
      ...
      

      或例如JSON:

      ...
      data: '{stringValue: "it is just a simple string"}',
      ...
      

      另见this discussion

      不幸的是,我还没有找到一种简单的方法来通过参数传递一串未格式化的数据。根据this answer,您可以执行以下操作:

      public IActionResult OnPostTest()
      {
          Stream req = Request.Body;
          req.Seek(0, System.IO.SeekOrigin.Begin);
          string stringValue = new StreamReader(req).ReadToEnd();
          ...
          // process your stringValue here
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-16
        • 2023-03-20
        • 1970-01-01
        • 2017-04-29
        • 2016-08-02
        • 2019-01-06
        • 1970-01-01
        • 2013-12-28
        相关资源
        最近更新 更多