ViewBag の仕組みを誤解しています。
MVC で作業しているときに Web ページを開くと、(おおまかに) 次のようになります。
- FooController の Method 'Index' が実行されます。最後に、View が返されます。
- MVC アプリケーションは、ビューを見つけて、関連する .aspx ファイルで見つけた HTML に従ってレンダリングを開始します。プログラムが「@ViewBag.Id」などの項目に遭遇した場合、基本的に「.Id」値が何であれ文字列置換を行います。(それよりも少し複雑ですが、議論のために、基本的に文字列の置換を行います)。
- レンダリング後、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
.