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

时间:2013-02-08 13:57:07

标签: json asp.net-mvc-3 asp.net-mvc-4 kendo-ui kendo-grid

我使用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" });
          }

3 个答案:

答案 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)]”,工作正常。