ajax中传递参数得到空值

2023-12-19

我正在使用 ajax 调用动作控制器,但我传递的参数data当动作控制器收到它时,属性始终为空... 这里会发生什么?

jQuery 函数:

function PostOrder()
{      
    var id = $(".aslink").data("customerid");
    var url = $("#btnAddOrderPost").data("url_add_order");       
    $.ajax({
        type:"post",
        url: url,
        data: JSON.stringify( { orderVM: $("#frmCreatePV").serialize()}),
        datatype: "json",
        contentType: "application/json",
        success: function () {
            alert("it was inserted");
        }
    })
}

动作控制器:

[HttpPost]
   // [ValidateAntiForgeryToken]
    public ActionResult CreatePV(OrderVM orderVM)
    {
        if (ModelState.IsValid)
        {
            List<string> top = new List<string>();
            decimal tempPrice = 0M;
            for (int i = 0; i < orderVM.Toppings.Count; i++)
            {
                if (orderVM.Toppings[i].IsSelected == true)
                {
                    top.Add(orderVM.Toppings[i].SpecificTopping);
                    tempPrice += orderVM.Toppings[i].Price;
                }
            }
            Order order = new Order
            {                 
                Toppings = top,
                TotalPrice = tempPrice
            };
            db.Orders.Add(order);
            db.SaveChanges();
            return RedirectToAction("Index");
        }            
        return View(orderVM);
    }

这是我正在使用这种类型的参数的 OrderVM ViewModel:

public class OrderVM
{           
    public virtual List<ToppingVM> Toppings { get; set; }
    public decimal TotalPrice { get; set; }
}

这是包含在部分视图中的形式:

@using (Html.BeginForm(null,null,FormMethod.Post, htmlAttributes: new { @id="frmCreatePV"}))
{
    @Html.AntiForgeryToken()
    <div class="form-horizontal">
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @{
                for (int i = 0; i < Model.Toppings.Count; i++)
                {
                    <div class="col-xs-4">
                        @Html.HiddenFor(model => model.Toppings[i].SpecificTopping)                       
                        @Html.CheckBoxFor(model => model.Toppings[i].IsSelected, htmlAttributes: new { data_price = Model.Toppings[i].Price, @id = "chbkPrice" })                      
                        @Html.HiddenFor(model => model.Toppings[i].Price)
                         @Html.LabelFor(model => model.Toppings[i].IsSelected , Model.Toppings[i].SpecificTopping)                        
                        <p>Price: @Model.Toppings[i].Price</p>
                    </div>
                }
            }
        </div>
        <div class="form-group">
            <div class="col-md-10">
                <input type="button" value="Add order" id="btnAddOrderPost" class="btn btn-primary"
                       data-url_add_order="@Url.Action("CreatePV", "Orders")" />
            </div>
        </div>
    </div>
                }

UPDATE

最后,这就是动作控制器的样子:

  [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult CreatePV(OrderVM orderVM)
    {
        int id = Convert.ToInt32(TempData["License"]);
        if (ModelState.IsValid)
        {
            List<string> top = new List<string>();
            decimal tempPrice = 0M;
            for (int i = 0; i < orderVM.Toppings.Count; i++)
            {
                if (orderVM.Toppings[i].IsSelected == true)
                {
                    top.Add(orderVM.Toppings[i].SpecificTopping);
                    tempPrice += orderVM.Toppings[i].Price;
                }
            }
            Order order = new Order
            {
                Customer = db.Customers.Where(c => c.LicenseNumber == id).First(),
                LicenseNumber = id,
                Toppings = top,
                TotalPrice = tempPrice
            };
            db.Orders.Add(order);
            db.SaveChanges();
            return Json(new { success= true, JsonRequestBehavior.AllowGet});
        }           
        return Json(new { success = false, JsonRequestBehavior.AllowGet});
    }

对于 JQuery 函数,请注意,我使用了 serializeArray() 将元素添加到未绑定到 html 表单的数据中:

function PostOrder()
{
    var orderVM = {};   
    id = $(".aslink").data("customerid");
    alert($("#btnGetOrderAdd").data("customerid"));
    var url = $("#btnAddOrderPost").data("url_add_order");
    var datavar = $("#frmCreatePV").serializeArray();
    datavar.push({name: "LicenseNumber" ,value : id})  
    $.ajax({
        type:"post",
        url: url,       
        data: datavar,
        datatype: "json",      
        success: function () {
            alert("it was inserted");
        }
    })
}

Remove contentType会为你工作。

contentType是您要发送的数据类型,因此 application/json; charset=utf-8 是一种常见的,application/x-www-form-urlencoded 也是如此; charset=UTF-8,这是默认值。

使用时contentType: 'application/json'您将无法依赖 $_POST 的填充。 $_POST 仅针对表单编码的内容类型填充。

在这种情况下,您可以访问 PHP 原始数据。

$input = file_get_contents('php://input');
$object = json_encode($input);

希望这对您有帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ajax中传递参数得到空值 的相关文章

  • jQuery 模板:使用 AND 运算符创建条件语句

    这有效
  • 从模板切换传递的类型

    在 C 中是否可以检查传递给模板函数的类型 例如 template
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 如何在 Asp.NET MVC 中使用 RedirectToAction() 传递多个对象?

    我想使用redirectToAction 方法传递多个对象 下面是我重定向到的操作结果 public ActionResult GetEmployees Models Department department Models Categor
  • UI 函数在快速事件完成之前触发

    我有一个停靠在 Silverlight 应用程序中的 Web 浏览器框架 有时会在其上弹出全窗口 XAML Silverlight UI 元素 我已经或多或少修复了一个老问题 即 Web 框架的内容似乎与 Silverlight 内容不能很
  • 使用 C# 和 wpf 创建类似 Dock 的应用程序

    我需要创建一个与我们购买笔记本电脑时获得的应用程序类似的应用程序 仅当鼠标指针到达窗口顶部时它才可见 那么我怎样才能使用 C 4 0 来做到这一点呢 http www notebookcheck net uploads pics win2
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 从BackgroundWorker线程更新图像UI属性

    在我正在编写的 WPF 应用程序中 我有一个 TransformedBitmap 属性 该属性绑定到 UI 上的 Image 对象 每当我更改此属性时 图像就会更新 因此显示在屏幕上的图像也会更新 为了防止在检索下一张图像时 UI 冻结或变
  • 使用 GCC 生成可读的程序集?

    我想知道如何使用GCC http en wikipedia org wiki GNU Compiler Collection在我的 C 源文件中转储机器代码的助记符版本 这样我就可以看到我的代码被编译成什么 你可以使用 Java 来做到这一
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 在 C#.NET 中安全删除文件

    在我正在做的一个项目中 我想为用户提供 安全 删除文件的选项 例如 用随机位或 0 覆盖它 在 C NET 中是否有一种简单的方法可以做到这一点 效果如何 你可以调用系统内部删除 http technet microsoft com en
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • C++ 中 void(*)() 和 void(&)() 之间的区别[重复]

    这个问题在这里已经有答案了 在此示例代码中 func1是类型void int double and funky是类型void int double include
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • YouTube 点击时禁用 HTML5

    有没有办法让我们通过javascript禁用HTML5视频的 播放 暂停 点击全屏 功能 然后在我们再次需要时将其放回去 我不知道你是否可以禁用它们 但你可以使用 css 删除它们 video webkit media controls f
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att

随机推荐