2011-12-07 6 views
2

ajaxを非常に重視したASP.NET MVCアプリケーション(jQuery)があります。ほとんどの場合、ユーザーは決してページを離れることはありません。コントローラーのアクションに対してさまざまなajaxリクエストを行います。JavaScriptのC#モデルのミラーリング - ASP.NET MVC

AJAX POSTを行う際に多くの場合、私は、コントローラのアクションにはJavaScriptからオブジェクトを渡しています。これらのケースのほとんどでは、JavaScriptでコントローラに渡すために作成したオブジェクトもC#モデルとして存在するため、JavaScriptでC#モデルの一部を実際にミラーリングしています。

私の質問は - これは間違っていますか?私の心配は、私のC#モデルでプロパティ名を変更することですが、JavaScriptで変更するのを忘れて、遅すぎてユーザーがそれを見つけてしまうまではわかりません(私は単体テストがこれらのシナリオの多くをキャッチすることを認識しています、 それでも ...)。

私には、JavaScriptと私のC#クラスの一部を反映するために、自動発電機のいくつかの並べ替えを書いて検討しています - しかし、そのナンセンスのすべてに入る前に、私は何かを明らかに不足しています場合、私は見るだろうと思いました。

ありがとうございました!

EDIT:

Iは、ASP.NET MVCを使用していますので、私はコントローラにAJAX POSTを行う場合、私は、AJAXから通過するデータを自動的に限り、彼らが持っているように、コントローラメソッドのパラメータに解析され同じ名前。

答えて

0

適切なJSONシリアライザ/デシリアライザを使用してください。

私はいくつかのクライアントでJson.NETを使用しました。 http://james.newtonking.com/pages/json-net.aspx

+0

はい、データはクライアント上で発生しています(JavaScript)。 JavaScriptでJSON形式のコントローラに送信されるプロパティと同様の名前のオブジェクトを作成する必要があります。私はここに何か基本的なものを逃しているかもしれません... – MattW

+0

@MattW - はい、しかし、javascriptはこれを簡単にします。あなたは単にJSON表記法でオブジェクトを作成します。すなわち、 '{a:1、b:2} '、またはあなたのオブジェクトが呼び出されたものを作成します。 JsonはJavaScript Object Notationの略で、そこに「オブジェクト」という用語があることに注意してください。 http://msdn.microsoft.com/en-us/library/bb299886.aspx –

+0

@Mystere入力をありがとう!私はJSONに慣れています。問題は、私のC#モデルに "a"(例のような)プロパティがある場合、そのプロパティ名をJavaScriptでミラーリングする必要があるということです。私のC#モデルでプロパティ名 "a"を変更する場合は、JavaScriptでJSON形式を変更してC#オブジェクトをミラーリングする必要があります。そうしないと、ASP.NET MVCによってデータが自動的に解析されません。私が今日していることは、C#クラスと同じプロパティを持つJavaScriptオブジェクトを作成し、そのJSONフォーマットをコントローラに渡すことです。しかし、プロパティ名が変更された場合、そのプロパティは解析されなくなりました – MattW

1

はバックステップを取り、それについて考えます。

あなたがしていることは、HTTPを介してデータとしてキー/値ペアを一括して送信することです。

あなたがやるべきことは、サーバー上のドメインオブジェクト/モデルにそれらのキー/値のペアをマッピングしています。

デフォルトのマッピングは、モデルのプロパティ名とすることができるが、あなたがモデルのプロパティ名を変更したときにHTTP APIを変更する行くことはできません。

これはHTTP APIを使用している誰とでも互換性がなくなり、契約は{foo:..}になり、{bar:..}になりました。

基本的には、モデルの変更をHTTP APIの変更に反映させることで間違っていることがあります。何をしたい

Model.from(HTTPData)工場やModel.manipulate(HTTPData)機能のいくつかの他の種類です。

+0

ここでレイアウトしている基本的な考え方が得られたと思いますが、実際の実装を視覚化するのに問題があります。 JSから私のC#コントローラにajax POST(必ずしも

ではなく)を介して2つの値(名前と年齢)を渡す必要があると仮定しましょう。また、これらの2つのプロパティだけを持つNameAgePairというC#モデルが既にあるとしましょう。どのようなコードで見えるだろうか(かなりかなりおいしい)?これまでのご協力ありがとうございます! – MattW

+0

@MattWすべての私のドメインオブジェクトには、['.construct'](https://github.com/Raynos/raynos-blog/blob/master/src/domain/post.js#L11)メソッドがあります。 jsonデータを実データオブジェクトに変換します。私のドメインオブジェクトで 'content'を' text'に変更することにしたら、私は[この行]を変更します(https://github.com/Raynos/raynos-blog/blob/master/src/domain/post.js# L17)を 'obj.text = post.content'とする。 – Raynos

+0

Ok ... JSONデータをコントローラに送信し、コントローラがオブジェクト(C#モデル)に解析する方法をコントローラに決定させると言っていますか?このシナリオでは、JS内のJSONプロパティ名を変更すると、C#モデルが正しく埋められないのですか?再度、感謝します! – MattW

関連する問題