3

私は MVC を少しの間 (2 か月間) 使用しており、ほとんどの部分で MVC を気に入っています。言語間で変数の値を共有できない場合がいくつかあります。例えば。

javascript/Jquery などで Cookie を設定できます。しかし、サーバーはそれらに到達できません。

C#/Razor では、クエリ文字列、ViewBags、ViewData、Sessions などを設定できます。しかし、これはサーバー側であるため、クライアント側の JavaScript はそれらに到達できません。

私が知りたいのは、C# または JavaScript で文字列のような変数を設定し、他の言語 (つまり、ac# Razor 変数Javascript で読み取る、またはその逆)。

AJax で Json や XML を使用する必要はまだありません。しかし、これが役立つなら、私はそれを検討します。私はこれらすべてに慣れていないので、私の無知を許してください。あなたの助けに感謝します。

4

4 に答える 4

6

C# -> JS

非表示の入力フィールドまたは data-* 属性に変数を配置し、Javascript または jQuery だけでそれらの値を取得します。

JS -> C#

ajax を使用して内容を送り返すか、非表示の入力の値を設定してから、サーバーに対して通常の形式の POST を実行することができます。

于 2012-07-03T18:18:23.337 に答える
2

隠しフィールドがあなたの問題を解決するなら、私はこれがおそらく最も簡単な方法だと思います。JSがデータを読み取る必要があり、データを表示したくない場合は、非表示のフィールドが意味をなします。

ただし、DBからのデータなど、かなり複雑なデータ要素が必要でした。これらのデータ要素は、JSで特定の方法(たとえば、イベントカレンダー)で初期化する必要があります。イベントデータはDBから読み取られますが、何らかの方法でJSデータ割り当てにする必要があります。

最も直接的な方法は、ビュー内のループで@ Html.Raw( "whatever you need")を実行して、ビューがJavascriptを出力するようにすることでした。これを行うためのよりクリーンな方法があるかもしれませんが(提案を読んで喜んで)、JSへのより複雑なデータ配信のオプションです。

ちなみに、URLはこれを行うためのクエリ文字列で作成されているため、データはサーバーに返されます(セキュリティ上の懸念が低い場合にのみデータを検索する場合)。

于 2012-07-03T18:39:41.340 に答える
2

もう1つの解決策があります。NewtonsoftJson を使用して、モデル全体、モデルの一部、またはその他のサーバー変数を json オブジェクトにシリアル化できます。

Javascript & カミソリ:

var model = @Html.Raw(JsonConvert.SerializeObject(Model))

問題は、VS2012 と Resharper の愚かさのために、このアプローチを使用するとおそらく構文エラーが発生することです。ただし、いくつかのトリックがあります。Razor/JavaScript と末尾のセミコロンです。

于 2013-09-05T15:07:57.947 に答える