为啥更新操作没有发布任何数据?
Posted
技术标签:
【中文标题】为啥更新操作没有发布任何数据?【英文标题】:Why is the update operation not posting any data?为什么更新操作没有发布任何数据? 【发布时间】:2013-01-24 07:29:58 【问题描述】:我正在使用带有内联编辑功能的 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" );
【问题讨论】:
哦 - 我正在使用 jQuery 1.8.3 【参考方案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);
【讨论】:
嘿Trey——你能说得更具体些吗?确定返回 kendo.stringify(data) 正在发送一个字符串(尽管是一个 json 字符串)? MVC 控制器可以接受 JSON 模型作为实际模型;您不必将它们解析为字符串。更改您的控制器以接受与您发送的 JSON 格式匹配的模型。 @anaximander - 感谢您的回复。我的动作方法中的模型(签名)会是什么样子?你能给我一个名字,姓氏的基本例子吗? 我即将解决这个问题。谁能告诉我如何将网格数据传递给parameterMap?模型不起作用。 我没有使用 Kendo MVC,所以我没有 DataSourceRequest。我不明白如何将 json 格式的数据发送到 CompanyContactModel 对象中。是否必须先反序列化?所以现在我的控制器签名看起来像 [HttpPost] public JsonResult EditAccountAdmin(List尝试在您的更新定义中这样做:
update:
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: "jsonCompanyContacts": kendo.stringify( jsonCompanyContacts: "John Doe" )
您可能必须删除参数映射中的操作才能使其正常工作。最主要的是您要发布一个与控制器中的同名 的变量。该变量应包含您的字符串化数据。
如果需要,您也可以将此操作移至您的 parameterMap。
【讨论】:
感谢洛加德的回复。我尝试将您的代码留在参数映射中(因为我认为内联编辑需要它)但它没有用。数据仍然为空。然后我注释掉了参数映射并且 POST 没有发生。 我还尝试允许参数映射对数据进行字符串化(参见我的更新)。仍然为空.. 感谢 Logard - 您的建议之一奏效了。我只是不知道为什么:-)【参考方案3】:我遇到了和你类似的问题。我从 broswer 获取值,但它没有将值发布到更新操作模型。
在我的例子中,我在模型上使用了“[ScriptIgnore(ApplyToOverrides = true)]”,效果很好。
【讨论】:
以上是关于为啥更新操作没有发布任何数据?的主要内容,如果未能解决你的问题,请参考以下文章