【发布时间】:2020-05-04 15:32:39
【问题描述】:
每当单击按钮时,我都会尝试更新我的模型。当我将我在剃刀文件中发送的数据记录到控制台时,数据就在那里。但是,当调用控制器方法时,模型是空的。
我的onclick方法:
function addCoupon() {
var code = document.getElementById("coupon-entry").value;
$.ajax({ // Validate coupon first. This is working.
method: "post",
url: `/cart/validate-coupon/` + code,
contentType: "application/json; charset=utf-8"
}).done(result => {
if (result.success) {
var model = @Html.Raw(Json.Serialize(Model));
console.log(model); // Countries and CheckoutData are correct here
$.ajax({
method: "post",
url: `/cart/add-coupon/` + code,
contentType: "application/json; charset=utf-8",
data: model
}).done(result => {
console.log("It worked");
});
}
});
}
我的模特:
public bool IsPos { get; set; }
public List<CountryDto> Countries { get; set; }
public CheckoutData CheckoutData { get; set; }
public string Payment ProcessorError { get; set; }
public bool DisplayRequiredErrors { get; set; }
public List<string> ValidationErrors { get; set; } = new List<string>();
public PaymentInformationModel PaymentInformation { get; set; } = new PaymentInformationModel();
public bool UseSavedCard { get; set; }
我的控制器:
[HttpPost("add-coupon/{code}")]
public async Task<IActionResult> AddCouponAsync(string code, CheckoutModel model)
{
// Countries and CheckoutData are null here
}
这里发布了几个类似的问题,但它们要么都有简单的模型,要么有的解决方案在我尝试时对我不起作用。
谢谢!
【问题讨论】:
-
我感觉您在前端的对象映射与您的 api 合同不匹配。您是否在 api 中放置了断点?如果是这样,您可以单步执行代码。您是否在模型上定义了验证?您是否尝试过使用邮递员之类的应用程序进行 api 调用?我认为将您的 api json 请求从 razor 与工作的邮递员 json 请求进行比较会很有用。
-
这个
/cart/add-coupon + code需要一个 / 我想像/cart/add-coupon/ + code -
抱歉,我在写这个问题的时候忘记加 / 了。即使使用斜线,这也不起作用。我试图用 Postman 进行这个调用,但我得到了同样的结果:一个空模型。如何在我的 api 中放置断点?你的意思是在控制器方法里面?
标签: javascript c# ajax razor