将动态变量转换为类时出错
本文关键字:出错 转换 动态 变量 | 更新日期: 2023-09-27 18:30:14
我使用ajax来确定何时更改下拉列表值,并将3个下拉列表的值传递给一个方法来确定价格。我使参数成为动态的,并创建了一个类来保存数据,但在getNewPrice方法中,当我试图访问var项信息时,我得到了一个null。我对这方面还很陌生,但我了解这个概念,我对如何将动态变量转换回字符串以便访问信息感到困惑。
$(document).ready(function () {
$('#documentTypeList').change(function () {
var modelData = {
documentType: $("#documentTypeList").val(),
urgency: $("#urgencyList").val(),
numberOfPages: $("#numberOfPagesList").val()
};
$.ajax({
type: "GET",
data: modelData,
url: "/Home/getNewPrice",
async: true,
success: function (result) {
document.getElementById('priceLabel').innerHTML = data.currentPrice;
}
});
});
public class modelData
{
public string documentType { get; set; }
public string numberOfPages { get; set; }
public string urgency { get; set; }
}
public JsonResult getNewPrice(modelData dropdownValues)
{
decimal currentPrice = Convert.ToDecimal(dropdownValues.urgency);
// do something with value and return a decimal
return Json(new { currentPrice = currentPrice }, JsonRequestBehavior.AllowGet);
}
我过去使用过javascript序列化程序。使用反序列化()函数。更具体地说=>c#
var list = serializer.Deserialize<List<GetJson>>(Request.Form["dataDetails"].ToString());
internal class GetJson{
public string variable1 {get;set;} //add your properties here
}
Javascript
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
$.ajax({
url: "url",
dataType: "json",
data: {
DataDetails: "[" + JSON.stringify($("#form1").serializeObject()) + "]"
},
如果你需要它更动态,你可以使用动态类型。
var list = serializer.Deserialize<List<dynamic>>(Request.Form["dataDetails"].ToString());
模型绑定器需要知道您的特定类型。它在属性中循环并指定值。
尝试
url: '/Home/getNewPrice',
data: modelData
public JsonResult getNewPrice(modelData dropdownValue)
{
//...
return Json(new { currentPrice = currentPrice }, JsonRequestBehavior.AllowGet);
}
document.getElementById('priceLabel').innerHTML = data.currentPrice;