我使用Kendo Grid进行内联编辑。当我单击“更新”按钮时,将使用此签名对我的控制器方法进行POST。控制器操作被命中,因此POST正在运行。
[HttpPost]
public HttpResponseMessage SaveAccountAdmin(string jsonCompanyContacts)
然而,更新操作中的POST数据永远不会到达 - 它始终为空。
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: {
jsonCompanyContacts: "John Doe"
}
},
这是完整的数据源代码。
var dataSource = new kendo.data.DataSource(
{
batch: false,
pageSize: 10,
transport: {
create: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json"
},
read: {
url: "/Company/ReadAccountAdmin"
},
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: {
jsonCompanyContacts: "John Doe"
}
},
//destroy: {},
parameterMap: function (data, type) {
return kendo.stringify(data);
}
},
这也不起作用:
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
//data: { "jsonCompanyContacts": kendo.stringify({ jsonCompanyContacts: "John Doe" }) }
data: { "jsonCompanyContacts": "John Doe" }
},
//destroy: {},
parameterMap: function (data, type) {
return kendo.stringify(data);
}
但是这个工作 - 为什么?
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
//data: { "jsonCompanyContacts": kendo.stringify({ jsonCompanyContacts: "John Doe" }) }
//data: { "jsonCompanyContacts": "John Doe" }
},
//destroy: {},
parameterMap: function (data, type) {
return kendo.stringify({ "jsonCompanyContacts": "John Doe" });
}
答案 0 :(得分:1)
尝试在更新定义中执行此操作:
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data:{ "jsonCompanyContacts": kendo.stringify({ jsonCompanyContacts: "John Doe" })}
}
您可能必须删除parameterMap中的操作才能使其生效。主要的是您要发布一个与控制器中同名的变量。该变量应包含您的字符串化数据。
如果需要,您也可以将此操作移动到parameterMap。
答案 1 :(得分:1)
该值不作为字符串传递给控制器。尝试使用模型。这可能会有所帮助:MVC3 & JSON.stringify() ModelBinding returns null model
你真的不想这样做。可能会在一个案例中工作,但你是在脚下射击自己。
模型
public class CompanyContactModel
{
public string CompanyContacts { get; set; }
}
控制器签名
public JsonResult SaveAccountAdmin(CompanyContactModel companyContactModel)
...
更好的
public JsonResult SaveAccountAdmin([DataSourceRequest]DataSourceRequest request, CompanyContactModel companyContactModel)
...
Update and Return and put into List
If error: ModelState.AddModelError(string.Empty, e.Message);
DataSourceResult result = [Your Model List].ToDataSourceResult(request, ModelState);
return Json(result, JsonRequestBehavior.AllowGet);
}
答案 2 :(得分:0)
我有类似你的问题。我从broswer获取值,但它没有将值发布到更新操作模型。
在我的情况下,我在模型上使用了“[ScriptIgnore(ApplyToOverrides = true)]”,工作正常。