尝试手动创建AJAX请求。 在客户端我有类似的东西:
function saveBatterySpecs(id) {
var url = '@Url.Action("SaveBatterySpecs", "Catalog")';
$.ajax({
type: "post",
url: url,
data: {
art: $("#art" + id).val(),
brand: $("#brand" + id).val(),
name: $("#name" + id).val(),
country: $("#country" + id).val(),
volt: $("#volt" + id).val(),
cap: $("#cap" + id).val(),
sp: $("#sp" + id).val(),
powc: $("#powc" + id).val(),
term: $("#term" + id).val(),
mount: $("#mount" + id).val(),
adds: $("#adds" + id).val(),
length: $("#length" + id).val(),
width: $("#width" + id).val(),
height: $("#height" + id).val(),
guar: $("#guar" + id).val()
},
dataType: 'text', //or json, no difference
success: hideEditForm(id)
});
在服务器上一个简单的
public ActionResult SaveBatterySpecs(string batteryData)
{
if (Request.IsAjaxRequest())
{
Debug.WriteLine(batteryData);
return PartialView("~/Views/Shared/EmptyView.cshtml");
}
else
return null;
}
控制器上的断点工作正常,浏览器调试器显示正常的数据请求。但我无法处理 - batteryData总是空的。 我做错了什么?表单解决方案无用,因为我们避免使用它们,目前无法使用。 我可以将类型从文本切换到json,但这没有帮助。
答案 0 :(得分:4)
我认为它不起作用,因为你将错误的参数传递给控制器。
尝试传递对象而不是字符串。
public class BatteryInfo
{
public long brand {get;set;}
public int height {get;set;}
etc.
}
然后在控制器中重现它
ublic ActionResult SaveBatterySpecs(BatteryInfo battery)
为什么不序列化表单而不是从表单元素中收集所有数据? 查看here了解详情
答案 1 :(得分:1)
我建议使用maxs87,发布实际对象而不是表示数据的字符串。
但是如果你真的只想接受一个字符串,你仍然需要匹配的变量名:
这将发布一个名为batteryData
的参数,其值为表示所有数据的JSON字符串。在控制器上,您的batteryData
变量将填充一个JSON字符串,您可以手动反序列化。
data: {
batteryData: JSON.stringify({
art: $("#art" + id).val(),
brand: $("#brand" + id).val(),
name: $("#name" + id).val(),
})
},