【问题标题】:Pass differents values in ajax在ajax中传递不同的值
【发布时间】:2018-12-06 11:08:59
【问题描述】:

我的目标是:

我正在尝试将值发送到我的控制器的方法中以更新数据库(通过 API 远程连接)。

我查看了几个教程(例如How to pass parameters in $ajax POST?),但我无法在控制器中发送数据我有一个 500 错误,这是由于我的 ajax 调用。

你能告诉我该怎么做吗?

查看

    $(document).ready(function () {
        $.ajax({
            url: "http://localhost:44338/Registration/ShowRegistration",
            type: 'POST',
            data: JSON.stringify({ "id": 1 }),
            contentType: 'application/JSON',
            success: function (data) { },
            error: function () { }
        })


    });

控制器

    [Authorize]
    [HttpPost]
    public async Task<ActionResult> ShowRegistration(Models.RegisterForm rF)
    {
        try
        {
            var test = rF.id;

            Ok("success");
        }
        catch (Exception e)
        {
            Console.Write(e.Message);
            return BadRequest();
        }
        return View();
    }

型号

public class RegisterForm
{
    public string id { get; set; }

}

【问题讨论】:

  • A 500 被称为“内部服务器错误”,这意味着您的服务器正在抛出异常。这可能是因为发送到 api 的参数无效(您是否调试过您发送的数据是什么?)或者因为您的服务器端代码中存在其他问题。您是否在控制器操作中放置了断点以检查发生了什么?
  • 是的,但实际上它没有进入我的控制器,这就是为什么我认为问题与我的 ajax 声明直接相关?
  • 我猜想改变 contentType: 'application/json; charset=utf-8',你能检查一下日期时间格式吗
  • 应该的。我认为问题在于日期参数(签入、签出)不是日期类型,而是字符串。首先将这些字符串解析为日期对象,然后在数据对象中使用 toISOString 方法。
  • 整个应用程序是否在 https://localhost:44338/ 上运行?也许使用相对路径发布到,如果您有 jQuery 检索复选框的值,它返回 on 而没有 true 或 @ 987654328@。你可以使用.is(':checked')

标签: c# jquery asp.net ajax model-view-controller


【解决方案1】:

现在先创建模型(标准方式)

试试这个并告诉我。

public class InfoModel
{
    public string id { get; set; }
    //Add your model fields here
}

你的 API

        [HttpPost]
        public async Task<ActionResult> ShowRegistration(InfoModel im)
        {
          //code
        }

您的 ajax 调用对此进行测试,然后发送更多数据:

$.ajax({
    url: "url",
    type: 'POST',
    data: JSON.stringify({"id": id}),
    contentType: 'application/JSON',
    success: function (data) {  },
    error: function () {};
}) 

测试示例:-

   <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script>
        $(document).ready(function () {
            $.ajax({
                url: "http://localhost:62211/Home/ShowRegistration",
                type: 'POST',
                data: JSON.stringify({ "id": 1 }),
                contentType: 'application/JSON',
                success: function (data) { },
                error: function () { }
            })


        });
    </script>

</head>
<body>

</body>
</html>

API

  using System.Threading.Tasks;
  using System.Web.Mvc;

namespace WebApplication5.Controllers
{
    public class HomeController : Controller
    {
        [HttpPost]
        public async Task<ActionResult> ShowRegistration(Models.info inf)
        {
            // Access inf.id 
            return null;
        }
    }
}

【讨论】:

  • 仍然为空值(或 0 表示 int).. 我编辑我的帖子让你看到我的代码。奇怪的是,如果我在 url 中传递 id 它可以工作.. 像 /id 但正文不起作用 >.>
  • 也许我应该添加 JSON.stringify?
  • 你应该使用 JSON.parse
  • 我试过这个:data: JSON.parse('{ "Status": status, "Cost": cost, "Terms": check1, "Info": check2 }'),但是我有一个错误“意外的 JSON 解析令牌”
  • 抱歉我用错了 json stringify w3schools.com/js/js_json_stringify.asp
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多