5

インライン編集で剣道グリッドを使用しています。「更新」ボタンをクリックすると、この署名を使用してコントローラ メソッドに対して POST が行われます。コントローラー アクションがヒットするため、POST が機能しています。

[HttpPost]
    public HttpResponseMessage SaveAccountAdmin(string jsonCompanyContacts)

ただし、更新操作の POST データは到着しません。常に null です。

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 returns null モデル

アップデート

あなたは本当にそのようにしたくありません。あるケースではうまくいくかもしれませんが、あなたは自分自身を撃っています。

モデル

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 に答える