Ajax 将空值传递给控制器
Ajax passing null value to controller
我有一个下拉列表,其中包含 ID 列表。客户将 select 一个,它会在页面上反映总价。我正在创建一个 ajax 调用,当从下拉列表中拉出不同的 ID 时,该调用将更新总数。
$("#BrandId").on('focus', function () {
// Store the current value on focus and on change
previous = this.value;
}).change(function () {
alert("Previous: " +previous);
sel = this.value;
alert("Selected: " +sel);
$.ajax({
cache: false,
type: "get",
contentType: "application/json; charset=utf-8",
url: '@Url.Action("GetBrandCost", "Shocks")',
data: JSON.stringify({ idp: previous, id: sel }),
dataType: "json",
aysnc: false,
success: function (data1) {
alert(data1);
//ShockTotal = $("#ShockTotal").html();
//ShockTotal = ShockTotal / 1;
////ShockTotal = ShockTotal - data1;
//$("#ShockTotal").html(data1);
}
});
});
警报工作正常,但 ajax 没有将这些 ID 传递到控制器,控制器只是接收空值。
public decimal GetBrandCost(string idp, string id)
{
decimal costp = 0;
decimal cost = 0;
if (id == "" || id == null || idp == "" || idp == null)
{
return 0;
}
ShockBrand brandp = db.ShockBrands.Find(idp);
costp = brandp.Cost;
ShockBrand brand = db.ShockBrands.Find(id);
cost = brand.Cost;
cost = cost - costp;
return cost;
}
因为它们是空的,所以我正在点击我的 if 语句并在成功中返回零。我读到的大部分内容都是添加内容类型,但这对我的情况似乎没有帮助,我确定它有点小。
从浏览器控制台,这个
$.ajax({
cache: false,
type: "get",
contentType: "application/json; charset=utf-8",
url: 'http://google.com',
data: JSON.stringify({ idp: 1, id: 2 }),
dataType: "json",
aysnc: false,
success: function (data1) {
console.log(data1)
}
});
returns 请求 http://google.com/?{%22idp%22:1,%22id%22:2}&_=1440696352799
,这是不正确的
并且没有 stringify
$.ajax({
cache: false,
type: "get",
contentType: "application/json; charset=utf-8",
url: 'http://google.com',
data: { idp: 1, id: 2 },
dataType: "json",
aysnc: false,
success: function (data1) {
console.log(data1)
}
});
returns http://google.com/?idp=1&id=2&_=1440696381239
(参见网络选项卡)
所以不要使用JSON.stringify
为什么它会起作用 - 你的 asp.net 控制器操作接收简单类型的参数(字符串、数字等)并且 jquery 足够聪明来确定要发送的内容,如果它是object inside object 它将把它作为 POST 数据发送给 POST,以及 GET 对象的字符串表示(你有 GET 请求,但出于知识的目的,只坚持两种类型的数据send, params & data) 所以当jquery配置url时,asp.net理解约定,匹配请求批准的行动
不过不信你自己查一下
chrome 开发控制台是你的朋友
你可以这么说
var dataReq={ idp: previous, id: sel };
data: dataReq
并且不需要使用 dataType 和 contentType。
通过删除
内容类型:“application/json;字符集=utf-8
和
数据类型:“json”
它对我有用。否则,我总是在控制器操作中得到 value = null 。
我用数据调用 ajax 的代码现在是:
$(function () {
$.noConflict();
$.ajax({
type: "POST",
url: "../Case/AjaxMethodForUpdate",
data: {typ: $('#typeID').val()},
success: OnSuccess,
failure: function (response) {
alert(response.d);
},
error: function (response) {
alert(response.d);
}
});
我有一个下拉列表,其中包含 ID 列表。客户将 select 一个,它会在页面上反映总价。我正在创建一个 ajax 调用,当从下拉列表中拉出不同的 ID 时,该调用将更新总数。
$("#BrandId").on('focus', function () {
// Store the current value on focus and on change
previous = this.value;
}).change(function () {
alert("Previous: " +previous);
sel = this.value;
alert("Selected: " +sel);
$.ajax({
cache: false,
type: "get",
contentType: "application/json; charset=utf-8",
url: '@Url.Action("GetBrandCost", "Shocks")',
data: JSON.stringify({ idp: previous, id: sel }),
dataType: "json",
aysnc: false,
success: function (data1) {
alert(data1);
//ShockTotal = $("#ShockTotal").html();
//ShockTotal = ShockTotal / 1;
////ShockTotal = ShockTotal - data1;
//$("#ShockTotal").html(data1);
}
});
});
警报工作正常,但 ajax 没有将这些 ID 传递到控制器,控制器只是接收空值。
public decimal GetBrandCost(string idp, string id)
{
decimal costp = 0;
decimal cost = 0;
if (id == "" || id == null || idp == "" || idp == null)
{
return 0;
}
ShockBrand brandp = db.ShockBrands.Find(idp);
costp = brandp.Cost;
ShockBrand brand = db.ShockBrands.Find(id);
cost = brand.Cost;
cost = cost - costp;
return cost;
}
因为它们是空的,所以我正在点击我的 if 语句并在成功中返回零。我读到的大部分内容都是添加内容类型,但这对我的情况似乎没有帮助,我确定它有点小。
从浏览器控制台,这个
$.ajax({
cache: false,
type: "get",
contentType: "application/json; charset=utf-8",
url: 'http://google.com',
data: JSON.stringify({ idp: 1, id: 2 }),
dataType: "json",
aysnc: false,
success: function (data1) {
console.log(data1)
}
});
returns 请求 http://google.com/?{%22idp%22:1,%22id%22:2}&_=1440696352799
,这是不正确的
并且没有 stringify
$.ajax({
cache: false,
type: "get",
contentType: "application/json; charset=utf-8",
url: 'http://google.com',
data: { idp: 1, id: 2 },
dataType: "json",
aysnc: false,
success: function (data1) {
console.log(data1)
}
});
returns http://google.com/?idp=1&id=2&_=1440696381239
(参见网络选项卡)
所以不要使用JSON.stringify
为什么它会起作用 - 你的 asp.net 控制器操作接收简单类型的参数(字符串、数字等)并且 jquery 足够聪明来确定要发送的内容,如果它是object inside object 它将把它作为 POST 数据发送给 POST,以及 GET 对象的字符串表示(你有 GET 请求,但出于知识的目的,只坚持两种类型的数据send, params & data) 所以当jquery配置url时,asp.net理解约定,匹配请求批准的行动
不过不信你自己查一下
chrome 开发控制台是你的朋友
你可以这么说
var dataReq={ idp: previous, id: sel };
data: dataReq
并且不需要使用 dataType 和 contentType。
通过删除 内容类型:“application/json;字符集=utf-8 和 数据类型:“json” 它对我有用。否则,我总是在控制器操作中得到 value = null 。 我用数据调用 ajax 的代码现在是:
$(function () {
$.noConflict();
$.ajax({
type: "POST",
url: "../Case/AjaxMethodForUpdate",
data: {typ: $('#typeID').val()},
success: OnSuccess,
failure: function (response) {
alert(response.d);
},
error: function (response) {
alert(response.d);
}
});