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

Json 为什么更新操作没有发布任何数据?,json,asp.net-mvc-3,asp.net-mvc-4,kendo-ui,kendo-grid,Json,Asp.net Mvc 3,Asp.net Mvc 4,Kendo Ui,Kendo Grid,我使用剑道网格进行内联编辑。当我单击“更新”按钮时,将向我的控制器方法发送带有此签名的帖子。控制器操作被命中,因此POST正在工作 [HttpPost] public HttpResponseMessage SaveAccountAdmin(string jsonCompanyContacts) 但是,更新操作中的POST数据从未到达-它始终为空 update: { url: "/Company/SaveAccountAdmin",

我使用剑道网格进行内联编辑。当我单击“更新”按钮时,将向我的控制器方法发送带有此签名的帖子。控制器操作被命中,因此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" });
          }

尝试在更新定义中执行此操作:

  update: {
      url: "/Company/SaveAccountAdmin",
      contentType: "application/json; charset=utf-8",
      type: "POST",
      dataType: "json",
      data:{ "jsonCompanyContacts":  kendo.stringify({ jsonCompanyContacts: "John Doe"  })}
      }
您可能必须删除parameterMap中的操作才能使其工作。最重要的是,您希望发布一个与控制器同名的变量。该变量应包含字符串化数据


如果需要,也可以将此操作移动到parameterMap。

该值不会作为字符串传递给控制器。尝试使用一个模型。这可能有助于:

更新 你真的不想那样做。有一种情况下可能管用,但你是在打自己的脚

模型

控制器签名

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);
}

我和你一样也有类似的问题。我从broswer获取值,但它没有将值发布到更新操作模型


在我的例子中,我在模型上使用了“[ScriptIgnore(ApplyToOverrides=true)],效果很好。

Oh-并且我使用jQuery 1.8.3谢谢作为回复日志。我尝试将您的代码留在参数映射中(因为我认为内联编辑需要它),但它不起作用。数据仍然为空。然后我注释掉了参数映射,但帖子没有出现。我还尝试允许参数映射字符串化数据(参见我的更新)。仍然无效..谢谢Logard-你的一个建议奏效了。我只是不知道为什么:-)嘿,特雷-你能更具体一点吗?当然返回的kendo.stringify(数据)正在发送一个字符串(尽管是json字符串)?MVC控制器可以接受json模型作为实际模型;您不必将它们解析为字符串。更改控制器以接受与您发送的JSON格式匹配的模型。@anaximander-感谢您的回复。动作方法中我的模型(签名)是什么样子的?你能给我举一个名为LastName的基本例子吗?我马上就要解决这个问题了。谁能告诉我如何将网格数据传递到parameterMap?模型不起作用。我没有使用剑道MVC,所以我没有DataSourceRequest。我不明白如何将json格式的数据发送到CompanyContactModel对象。它不需要先反序列化吗?因此,现在我的控制器签名看起来像[HttpPost]public JsonResult EditAccountAdmin(列出jsonCompanyContacts)。现在的问题是让parameterMap发送网格数据。我已经找了好几个小时了。没有什么
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);
}