0

以下のデータを提供するために POST を実行する以下の ajax 呼び出しがあります。

self.present_conditions = "[{"タウンシップ":"12","範囲":"21","区画":"111","エーカー":"19"}]"

    var data = ko.toJSON(self.present_conditions());
    $.ajax({
        type: "POST",
        url: "/Home/PBHEP",
        contentType: "application/json; charset=utf-8",
        data: data
    }).done(function () {
        alert("Data Saved");
    });

以下のアクション結果でサーバー側でこのデータを受け取りたいのですが、常に null 値になります。

[HttpPost]
    public ActionResult PBHEP(string[] data)
    {
        return View();
    }

その配列をサーバー側に取得するには、ここで何をすべきですか。

前もって感謝します。

4

5 に答える 5

0

私の経験から、配列を文字列化すると、present_conditions と同じ形式になりますが、サーバー側で受け取るのは配列ではなく、個々のフィールドです。コントローラーを

[HttpPost]
public ActionResult PBHEP( string Township, string Range, string Section, string Acres)
{
    return View();
}

これらのフィールドには、送信された配列からの一致するデータが入力されている必要があります。うまくいけば、これが役に立ちます。

于 2013-09-11T22:22:08.020 に答える
0

オブジェクトの配列を送信する (またはキーと値のペアを設定する) と、サーバーは文字列の配列を期待します。

そのため、サーバー メソッドの型引数を Dictionary[] または dynamic に変更してみてください。

お役に立てば幸いです。

于 2013-09-11T16:08:46.733 に答える
0

だからここに何が起こったのか、最終的にajaxで投稿することをあきらめ、単純なjquery投稿を使用しました。これで、コントローラーで値を取得できるようになりました

JS:

    self.submit_conditions = function () {
    var PC_data = ko.toJSON(self.present_conditions());
    var FC_data = ko.toJSON(self.future_conditions());

    $.post("/Home/PBHEP", { "PC": PC_data, "FC": FC_data});
}

コントローラ

 [HttpPost]
    public ActionResult PBHEP(string PC,string FC)
    {
        JavaScriptSerializer ser = new JavaScriptSerializer();
        List<Conditions> PC_rows = ser.Deserialize<List<Conditions>>(PC);
        List<Conditions> FC_rows = ser.Deserialize<List<Conditions>>(FC);
    }

これが誰かに役立つことを願っています。助けてくれてありがとう。

于 2013-09-18T16:15:41.147 に答える
0

キーと値の配列オブジェクトを送信しますが、コントローラーのアクションで文字列配列を受け取ります: 1) ダミアンが述べたように、入力パラメーターを Dictionary に変更する必要があります 2) ポストリクエストを変更し、データ型を追加する必要があります: "json"

var data = ko.toJSON(self.present_conditions());
$.ajax({
    type: "POST",
    url: "/Home/PBHEP",
    datatype: "json",
    contentType: "application/json; charset=utf-8",
    data: data
}).done(function () {
    alert("Data Saved");
});
于 2013-09-11T18:55:31.380 に答える
0

同じ問題に直面したため、配列を JSON シリアル化文字列として渡すことで修正しました。

$.ajax({
    type: 'GET',
    url: '/Controller/ActionMethod/',
    data: { idsJSON: ko.toJSON(ids) },

サーバー側から、配列をデシリアライズするために受け取りました

public JsonResult ActionMethod(string idsJSON)
{
    List<long> ids = JsonConvert.DeserializeObject
        <List<long>>(idsJSON);
于 2013-09-18T15:14:07.383 に答える