Javascript MVC控制器无法从Ajax POST请求中获取双值
我有POST函数,我需要从JS向控制器发送我的值。字符串和整数值的到达没有问题,但双值在服务器端没有到达,但当我在本地端尝试时,它工作了。为什么会这样 这里是我的JS和控制器代码Javascript MVC控制器无法从Ajax POST请求中获取双值,javascript,c#,ajax,asp.net-mvc,Javascript,C#,Ajax,Asp.net Mvc,我有POST函数,我需要从JS向控制器发送我的值。字符串和整数值的到达没有问题,但双值在服务器端没有到达,但当我在本地端尝试时,它工作了。为什么会这样 这里是我的JS和控制器代码 var cmbvdf = $('#cmbvolDec').data('kendoComboBox'); var cmbvdfval = cmbvdf.value(); var cmbadf = $('#cmbamtDec').data('kendoComboBox'); var cmbadfval = cmbadf.v
var cmbvdf = $('#cmbvolDec').data('kendoComboBox');
var cmbvdfval = cmbvdf.value();
var cmbadf = $('#cmbamtDec').data('kendoComboBox');
var cmbadfval = cmbadf.value();
var cmbCur = $('#cmbCurrency').data('kendoComboBox');
var cmbcurrency = cmbCur.value();
var cmtheme = $('#cbmTheme').data('kendoComboBox');
var cmbvaltheme = cmtheme.value();
var cmblang = $('#cmbLanguage').data('kendoComboBox');
var cmbvallang = cmblang.value();
var custname = $("#txtCustName").val();
var websitetitle = $("#txtWebName").val();
var zoom = $("#txtZoom").val();
var lat1 = $("#txtLat1").val();
var lon1 = $("#txtLon1").val();
var url = '../Setting/SaveRecords';
$.ajax({
type: "POST",
url: url,
data:JSON.stringify({ 'volumeDecimalFactor': cmbvdfval, 'amountDecimalFactor': cmbadfval, 'currency': cmbcurrency, 'theme': cmbvaltheme, 'language': cmbvallang, 'customerName': custname, 'lat1': lat1, 'lon1': lon1, 'web': websitetitle, 'zoom': zoom }),
contentType: 'application/json, charset=utf-8',
traditional: true,
success: function (data) {
//do something
}
});
这是我的控制器
public ActionResult SaveRecords(string volumeDecimalFactor, string amountDecimalFactor, string currency, string theme, string language, string customerName, double? lat1, double? lon1, string web, double? zoom)
{
//when i'm on my local machine i can get double values without problem.
//when i published on server i cannot get values and return to me null!
}
编辑
这是来自谷歌浏览器网络标签的请求负载
amountDecimalFactor: "2"
currency: "4"
customerName: "Fuel Card System"
language: "1"
lat1: "41.071789"
lon1: "28.980325"
theme: "4"
volumeDecimalFactor: "2"
web: "WebProject"
zoom: "5.2
请注意,我的本地PC和服务器位于不同的国家/地区。为避免此类情况,请始终在一个字符串中生成您的
JSON
,并将其发送到控制器。在您的情况下,您可以执行以下操作:
<script type="text/javascript">
var cmbvdf = $('#cmbvolDec').data('kendoComboBox');
var cmbvdfval = cmbvdf.value();
var cmbadf = $('#cmbamtDec').data('kendoComboBox');
var cmbadfval = cmbadf.value();
var cmbCur = $('#cmbCurrency').data('kendoComboBox');
var cmbcurrency = cmbCur.value();
var cmtheme = $('#cbmTheme').data('kendoComboBox');
var cmbvaltheme = cmtheme.value();
var cmblang = $('#cmbLanguage').data('kendoComboBox');
var cmbvallang = cmblang.value();
var custname = $("#txtCustName").val();
var websitetitle = $("#txtWebName").val();
var zoom = $("#txtZoom").val();
var lat1 = $("#txtLat1").val();
var lon1 = $("#txtLon1").val();
var json = {
cmbvdfval : cmbvdfval,
cmbadfval : cmbadfval,
cmbcurrency : cmbcurrency ,
cmbvaltheme : cmbvaltheme ,
cmbvallang : cmbvallang ,
custname : custname ,
websitetitle : websitetitle ,
zoom : zoom ,
lat1 : lat1 ,
lon1 : lon1
};
$.ajax({
url: '@Url.Action("SaveRecords", "Setting")',
type: 'post',
dataType: "json",
data: { "json": JSON.stringify(json)},
success: function (result) {
//do something
},
error: function (error) {
console.log(error)
}
});
</script>
请使用Chrome开发者工具(网络选项卡)向我们显示发布的确切有效负载。var lon1=$(“#txtLon1”).val()代码>那可能是lon1
astring
吗?如何将其转换为双精度
?因为它在本地计算机上工作,而不是在服务器上工作(在您提到的另一个国家/地区),因此可能是此解决方案中提到的区域性问题:它被标记为重复问题,因为此问题在此处已经有答案:。如果您查看了此答案,如果你把这段代码放在构造器或main的开头,它会根据当地文化调整你的程序。Thread.CurrentThread.CurrentCulture=System.Globalization.CultureInfo.InvariantCulture;
using System.Web.Script.Serialization;
[HttpPost]
public ActionResult SaveRecords(string json)
{
var serializer = new JavaScriptSerializer();
dynamic jsondata = serializer.Deserialize(json, typeof(object));
//Get your variables here from AJAX call
var zoom = jsondata["zoom"];
var lat1 =jsondata["lat1"];
//Do something with your variables here
return Json("Success");
}