我正在使用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);
}
答案 0 :(得分:1)
我过去使用过javascript序列化程序。使用deserialize()函数。 更具体地说=> 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());
答案 1 :(得分:0)
模型绑定器需要知道您的特定类型。它遍历属性并分配值。
尝试
url: '/Home/getNewPrice',
data: modelData
public JsonResult getNewPrice(modelData dropdownValue)
{
//...
return Json(new { currentPrice = currentPrice }, JsonRequestBehavior.AllowGet);
}
document.getElementById('priceLabel').innerHTML = data.currentPrice;