2012-08-14 25 views
16

jqueryを使用して動的にビューバックの値を設定する方法はありますか? 私はその正しい場合は知らないが、私は私のMVC 3プロジェクトを実行しようとすると、このエラーが助けてください私の放火魔にJqueryを使用してViewBagの値を設定する

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

に表示されます。

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

、私のスクリプトでこのコードを試してみてくださいありがとう

+0

私はエラーを入力するのを忘れています。 –

+0

おそらく '@ ViewBag.Id'はどこかに定義されていないので、何も出力されません(エラーではなく)ので、割り当ての左側は何もありません。コードをチェックして、 '@ ViewBag.Id'が宣言されている場所を確認してください。 – Bojangles

答えて

36

あなたはViewBagの仕組みを誤解しています。

MVCで働いて、そしてあなたがWebページを開くと、これは何が起こるか(およそ)である:

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

ブラウザがページを取得するまでに、あなたのViewBagは基本的に「範囲外」になっています。これは、あなたのASP(MVC)アプリケーションがViewBagを使用しているためですが、Javascriptはウェブブラウザ文書内のスコープを持っているだけです(これはブラウザに戻されたHTMLコード、範囲外です.JavascriptはMVCアプリケーションの一部ではなく、結果のWebページだけです。

これは簡単な答えではありません。 。 あなただけのHTMLページではなく、他の方法で回避にViewBag値を置くことができる

あなたのIdは、ASPXファイルに次のコード5であると仮定します。

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

は、お使いのブラウザは唯一、この最後の部分を見ているので、それだけでJavaScriptで意味がありません

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

としてブラウザに送信されます。あなたの場合、構文エラーでは、変数が初期化されておらず、nullにアクセスしようとしているだけです。

+0

ありがとうございました。今私はあなたのポイントを本当に理解しています。私はviewbagの値を表示することしかできませんが、jqueryを使用して値を設定することは不可能です。どうもありがとう。 –

+0

これらのソリューションの代替手段はありますか? – ashveli

+0

@ anvesh.veerelli:ウェブページで行われた変更をサーバが認識したい場合。あなたのWebページをサーバーに接続する必要があります。これは、フォーム投稿、Ajax呼び出しから、SignalRのようなより複雑なソリューションに至るまで、多くの異なる方法で実行できます。あなたの質問は非常に幅広いです。 – Flater

関連する問題