gpt4 book ai didi

jquery - 类似的 JSON 请求,但发送 null 对象

转载 作者:行者123 更新时间:2023-12-03 22:49:44 25 4
gpt4 key购买 nike

我正在 ASP.NET MVC4 上进行开发。我的代码中有两个提交 JSON 对象的 JSON 请求。其中一个工作正常,另一个由于某种原因传递了一个空值。有什么想法吗?

注意:在这两种情况下,请求实际上都到达了预期的 Controller 。只是第二个传递的是 NULL,而不是我精心填充的对象。

工作 JavaScript:

 $('#btnAdd').click(function () {
var item = {
Qty: $('#txtQty').val(),
Rate: $('#txtRate').val(),
VAT: $('#txtVat').val()
};

var obj = JSON.stringify(item);
$.ajax({
type: "POST",
url: "<%:Url.Action("AddToInvoice","Financials")%>",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: obj,
success: function (result) {
alert(result);
},
error: function (error) {
//do not add to cart
alert("There was an error while adding the item to the invoice."/* + error.responseText*/);
}
});
});

工作 Controller 操作:

[Authorize(Roles = "edit,admin")]
public ActionResult AddToInvoice(InvoiceItem item)
{
return Json(item);
}

传递 NULL 对象的 JavaScript:

$('#btnApplyDiscount').click(function () {
var item = { user: $('#txtAdminUser').val(),password: $('#txtPassword').val(), isvalid: false };

var obj = JSON.stringify(item);
alert(obj);
$.ajax({
type: "POST",
url: "<%:Url.Action("IsUserAdmin","Financials")%>",
dataType: "json",
contentType: "application/json; charset=utf-8",
data: obj,
success: function (result) {
if (result.isvalid)
{
//do stuff
}
else
{
alert("invalid credentials.");
}
},
error: function (error) {
//do not add to cart
alert("Error while verifying user." + error.responseText);
}
});

});

接收空对象的 Controller 操作:

[Authorize(Roles = "edit,admin")]
public ActionResult IsUserAdmin(myCredential user)
{
//validate our user
var usercount = (/*some LINQ happening here*/).Count();
user.isvalid = (usercount>0) ? true : false;
return Json(user);
}

更新:发票项目

public partial class InvoiceItem
{
public Guid? id { get; set; }
public string InvCatCode { get; set; }
public string Description { get; set; }
public decimal Amount { get; set; }
public decimal VAT { get; set; }
public int Qty { get; set; }
public decimal Rate { get; set; }
public Nullable<decimal> DiscountAmount { get; set; }
public string DiscountComment { get; set; }
public Nullable<bool> IsNextFinYear { get; set; }
public Nullable<System.DateTime> ApplicableFinYear { get; set; }
}

我的凭证:

public partial class myCredential
{
public string user { get; set; }
public string password { get; set; }
public bool? isvalid { get; set; }
}

路线值:

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

}

Firebug 显示 item 是一个 JSON 对象,正如预期的那样。也是一个“字符串化”对象。调试服务器端代码发现myCredential参数为空。

最佳答案

您不需要对对象进行字符串化,因为 jQuery 会为您完成此操作。我的猜测是,字符串化(如果这是一个词)正在做的事情正在混淆 ModelBinder。试试这个:

var obj = { 
'user': $('#txtAdminUser').val(),
'password': $('#txtPassword').val(),
'isvalid': false
};

$.ajax({
data: obj,
// rest of your settings...
});

关于jquery - 类似的 JSON 请求,但发送 null 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13953296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com