0

だから私はこのJSONを持っています

mrn:"0760433"
res:[{"registry":1,"episodeType":{"id":6,"dateAndTime":"08-06-2012 13:21"}}]

そして、私はこれらのビューモデルを持っています

    public class patient
    {
        public string mrn { get; set; }

    }

    public class episodeType
    {
        public int id { get; set; }
        public string dateAndTime { get; set; }
    }

    public class registryEpisode 
    {
        public int registry { get; set; }
        public episodeType episodeType { get; set; }

       public registryEpisode()
       {
           registry = 0;
           episodeType = new episodeType();
       }
    }

そして、このコントローラーの署名:

public JsonResult StartSession(string mrn, List<registryEpisode> res)

私が投稿するとき、 res は常に null です。何かご意見は?私は何を間違っていますか?はい、投稿しています。はい、jquery を使用しています。

$.post('Action', data, function () {});

はい、コントローラーでアクションにアクセスできますが、res は null です。ヘルプ!いつもありがとうございます…!

4

1 に答える 1

1

これは解決するのに興味深いものでした...私はノックアウトを使用しています。Knockout には、viewModel を pojo (プレーンな古い JSON オブジェクト) または pojso (プレーンな古い JavaScript オブジェクト) として配信できる機能がいくつかあります。

だからここに当然の瞬間があります... asp.netモデルバインダーは、変換のために文字列化されたJSON文字列を期待しています。Knockout の toJSON はすでに viewModel を文字列化しています。そのため、アクションの引数として文字列のようなプリミティブ型とコレクションがある場合、次のようなプリミティブ型の値を取得する必要があります。

var m = self.model.property();

次に、コレクションを pojso として取得します。

var c = ko.toJS(self.model.collection)

次に、それらを1つの完全なビューモデルとして文字列化します

var data = JSON.stringify({prop1: m, prop2: c});.

最後に、次のようなアクション メソッドへの jquery ajax 呼び出しを使用してモデル サーバー側を送信します。

public JsonResult StartSession(string prop1, IList<registryEpisode> prop2){}

それは明らかにトリックを行います。私にはハックのように思えますが、うまくいきます。これが他の誰かに役立つことを願っています。

于 2012-08-06T20:58:20.547 に答える