web-dev-qa-db-ja.com

Jqueryを使用してViewBagで値を設定する

質問したいのですが、jqueryを使用してviewbag値を動的に設定する方法はありますか?スクリプトでこのコードを試します

$(".btn").on("click",function(){
@ViewBag.Id = $(this).attr("id")
});

正しいかどうかはわかりませんが、MVC 3プロジェクトを実行しようとすると、このエラーがfirebugに表示されます

Syntax Error
    = $(this).attr("id")

助けてください。ありがとう

16

ViewBagの仕組みを誤解しています。

MVCで作業しているときにWebページを開くと、これが(大体)起こります。

  1. FooControllerのメソッド 'Index'が実行されます。最後に、ビューが返されます。
  2. MVCアプリケーションがビューを検索し、関連する.aspxファイルで見つかったHTMLに従って表示を開始します。プログラムが「@ ViewBag.Id」などのアイテムを検出した場合、基本的には「.Id」値が何であれ、文字列を置換します。 (それよりも少し複雑ですが、引数のために、基本的に文字列の置換を行います)。
  3. レンダリング後、HTMLドキュメントがブラウザに送信され、ブラウザで表示されます。

ブラウザがページを取得する頃には、ViewBagは基本的に「範囲外」になっています。これは、ASP(MVC)アプリケーションがViewBagを使用しますが、JavascriptはWebブラウザードキュメント内にのみスコープを持っているためです(これはブラウザーに返されたHTMLコードですbyアプリケーション、 ViewBagは範囲外になりました。JavaScriptはMVCアプリケーションの一部ではなく、結果のWebページのみです。

簡単に言えば、そのようなことはできません。インライン文字列置換を行うと考えてみてください。 ViewBag値はHTMLページにのみ配置でき、その逆はできません。

Idが5、aspxファイル内の次のコードであるとします。

$(".btn").on("click",function(){
    @ViewBag.Id = $(this).attr("id")
});

としてブラウザに送信されます

$(".btn").on("click",function(){
    5 = $(this).attr("id")
});

ブラウザはこの最後の部分しか表示しないため、Javascriptでは意味がありません。あなたの場合、構文エラーでは、変数が初期化されていないことを意味し、nullにアクセスしようとしています。

42
Flater