为什么更新操作没有发布任何数据?

Gre*_*reg 5 json asp.net-mvc-3 asp.net-mvc-4 kendo-ui kendo-grid

我使用Kendo Grid进行内联编辑.当我单击"更新"按钮时,将使用此签名对我的控制器方法进行POST.控制器操作被命中,因此POST正在运行.

[HttpPost]
    public HttpResponseMessage SaveAccountAdmin(string jsonCompanyContacts)
Run Code Online (Sandbox Code Playgroud)

但是,更新操作中的POST数据永远不会到达 - 它始终为null.

update: {
              url: "/Company/SaveAccountAdmin",
              contentType: "application/json; charset=utf-8",
              type: "POST",
              dataType: "json",
              data: {
                  jsonCompanyContacts: "John Doe"
              }
          },
Run Code Online (Sandbox Code Playgroud)

这是完整的数据源代码.

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);
          }
      },
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

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);
          }
Run Code Online (Sandbox Code Playgroud)

但是这个工作 - 为什么?

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" });
          }
Run Code Online (Sandbox Code Playgroud)

Tre*_*ann 1

该值不会作为字符串传递给控制器​​。尝试使用模型。这可能会有所帮助:MVC3 & JSON.stringify() ModelBinding 返回 null 模型

更新

你真的不想那样做。在一种情况下可能有效,但你是在搬起石头砸自己的脚。

模型

public class CompanyContactModel
{
    public string CompanyContacts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制者签名

public JsonResult SaveAccountAdmin(CompanyContactModel companyContactModel)
...
Run Code Online (Sandbox Code Playgroud)

更好的

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);
}
Run Code Online (Sandbox Code Playgroud)