5

我正在使用带有内联编辑的 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" });
          }
4

3 回答 3

1

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

  update: {
      url: "/Company/SaveAccountAdmin",
      contentType: "application/json; charset=utf-8",
      type: "POST",
      dataType: "json",
      data:{ "jsonCompanyContacts":  kendo.stringify({ jsonCompanyContacts: "John Doe"  })}
      }

您可能必须删除 parameterMap 中的操作才能使其正常工作。最主要的是你想发布一个与你的控制器同名的变量。该变量应包含您的字符串化数据。

如果需要,您也可以将此操作移至您的 parameterMap。

于 2013-02-08T14:22:12.367 回答
1

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

更新

你真的不想那样做。可能在一种情况下有效,但您是在自取其辱。

模型

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);
}
于 2013-02-08T14:24:26.677 回答
0

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

就我而言,我在模型上使用了“[ScriptIgnore(ApplyToOverrides = true)]”,效果很好。

于 2014-08-28T09:24:57.283 回答