我将一个JSON字符串发布到asp.net MVC,如下所示。
AJAX调用
$.ajax({
type: "POST",
url: "@(storeLocation)IDR/OpcInsertCustomerProfile/",
data: JSON.stringify(currSelection),
contentType: "application/json",
success: function(data) {
alert('success : ' + JSON.stringify(data));
},
error: function(data) {
alert('Error : ' + JSON.stringify(data));
}
}
);
在控制器中:
[HttpPost]
[ActionName("OpcInsertCustomerProfile")]
public JsonResult OpcInsertCustomerProfile(string currSelectionData)
{
try
{
JavaScriptSerializer ser = new JavaScriptSerializer();
var res = ser.Serialize(currSelectionData);
return Json(currSelectionData, JsonRequestBehavior.AllowGet);
}
catch (Exception exc)
{
return Json(new { error = 1, message = exc.Message });
}
}
调试器指示操作被成功调用,但是接收的传入字符串参数始终为null。 Firebug'post'显示传出参数是正确的json对象。我希望看到JSON字符串作为传入参数。请注意,我不想将其反序列化为适当的对象。我想要做的就是将字符串以JSON格式存储在数据库中“as-it-is”。稍后需要检索并传递给Javascript。
答案 0 :(得分:3)
试试这个:
$.ajax({
type: "POST",
url: "@(storeLocation)IDR/OpcInsertCustomerProfile/",
data: { "currSelectionData" : "'" + JSON.stringify(currSelection) + "'" },
contentType: "application/json",
success: function(data) {
alert('success : ' + JSON.stringify(data));
},
error: function(data) {
alert('Error : ' + JSON.stringify(data));
}
}
);
答案 1 :(得分:1)
一种方法是允许操作接收参数作为POST数据而不是JSON“字符串化”数据。为此,请在没有JSON.Stringify的情况下发布数据。希望这就是你所需要的。
如果不是,您可能想尝试创建一个对象,只是为了接收这个简单的数据。
答案 2 :(得分:0)
看一下你的动作方法:方法接受带有序列化JSON的字符串是否正确,而不是再次将该字符串序列化为JSON,然后解除结果并序列化并再次返回相同的字符串?
如果使用application / json类型发送请求,ASP.NET MVC会尝试反序列化收到的字符串并将其绑定到操作参数:在您的情况下,它会尝试在您的JSON对象中找到属性currSelectionData 。这个属性存在吗?也许你期望整个字符串被收到currSelectionData
参数?然后你需要使用FormCollection或Request.Form,因为默认模型绑定器不支持这个。
答案 3 :(得分:0)
实际上我用json填写我的州选择国家下拉列表我喜欢这个
在我的控制器中我有动作它以json格式返回我的数据,如下所示
public JsonResult State(int countryId)
{
var stateList = CityRepository.GetList(countryId);
return Json(stateList, JsonRequestBehavior.AllowGet);
}
在我看来
<script type="text/javascript">
function cascadingdropdown() {
$("#stateID").empty();
$("#stateID").append("<option value='0'>--Select State--</option>");
var countryID = $('#countryID').val();
$.ajax({
url: "/City/State",
dataType: 'json',
data: { countryId: countryID },
success: function (data) {
$("#stateID").empty();
$("#stateID").append("<option value='0'>--Select State--</option>");
$.each(data, function (index, optiondata) {
alert(optiondata.StateName);
$("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>");
});
},
error: function () {
alert('Faild To Retrieve states.');
}
});
}
</script>
我认为这会对你有帮助......
答案 4 :(得分:0)
通过Ajax发送json时,我认为这是Ajax中数据属性的正确方法:
data: "{'parameterNameInAction':'" + JSON.stringify(jsonData) + "'}"