20

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

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

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

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

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

4

1 に答える 1

50

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

MVC で作業しているときに Web ページを開くと、(おおまかに) 次のようになります。

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

ブラウザーがページを取得するまでに、ViewBag は基本的に「範囲外」になっています。これは、ASP (MVC) アプリケーションが ViewBag を使用しているにもかかわらず、Javascript は Web ブラウザー ドキュメントにしかスコープを持たないためです (これは、ViewBag がスコープ外になったに、アプリケーションによってブラウザーに返された HTML コードです。 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.

于 2012-08-14T09:00:07.840 に答える