2009-07-10 5 views
0

、私はこれを持っている....私が選択したリスト項目のクラスを変更する必要がMVCのHTML要素のスタイル/クラスを設定する方法は?マスターページで

<ul id="productList"> 
    <li id="product_a" class="active"> 
    <a href="">Product A</a> 
    </li> 
    <li id="product_b"> 
    <a href="">Product B</a> 
    </li> 
    <li id="product_c"> 
    <a href="">Product C</a> 
    </li>      
</ul> 

... 「製品A」がクリックされると、それは「アクティブ」を取得クラス、および他のものは取得しません。 'Product B'をクリックすると、 'アクティブ'クラスが取得され、他のクラスは取得されません。 ホームコントローラーでやってみようとしていますが、そのページやその要素の説明に苦労しています。

+0

どのような動的言語を使用していますか? – Greg

答えて

0

モデル内に、リスト項目のIDに対応するid項目を持つことができます。現在のモデルがリスト項目のIDと一致するかどうかを確認します。存在する場合は、アクティブなクラスを設定します。

1

コントローラからHTMLにアクセスすることはできません。 Javascriptでそれを行うか、ページをリフレッシュしてHTMLを再生成する必要があります(たとえば、別のクエリ文字列パラメータを使用して同じページに投稿する)。あなたのコントローラでは、どのアイテムが選択されているのかを指定し、リストを生成するときにビューで選択したものをチェックし、クラスをその上に置きます。

2

私は、ページやその要素に関係することに苦労しています。

あなたは本当にMVCを取得していないようですね。あなたのコントローラは、ビューのhtml要素への参照を持つべきではありません。プロダクトのリストを含むモデル(この場合はおそらくビューモデル)を作成し、それが選択されていることを示す必要があります。ビューは、単にView Modelの内容をHTMLとして表示します。おそらくモデル内の製品にループを含み、Activeプロパティをチェックします。

0

これはいくつかの方法で実行できます。シンプルなアプローチは、リンクのURLがそれが行くページに一致することを確認することです。次に、アンカータグのアクティブな状態を定義すると、CSSが残りの部分を処理します。すべてのリンクが同じURLを指している場合、これはうまくいきません。コントローラがアクティブなリンクのIDをビューに渡すようにして、状態を制御できます。次に、作成しているリストを反復処理するときに、ViewDataのIDと反復処理するIDを一致させることができます。探しているものが見つかったら、クラスを手動で「アクティブ」に設定できます。古い学校の方法...しかし、動作します!

0

あなたがASP.NET MVCについて質問しているとすれば、コントローラでこれを実行しようとする意図は何ですか?

Maxが述べたように、JavaScriptを使用すると簡単で効率的です。

0

これはテストされています。

<html> 
    <style type="text/css"> 
    a:active 
    { 
     color="green"; 
    } 
    </style> 

    <ul id="productList"> 
     <li id="product_a" class="active" onclick="setActive(this)"> 
     <a href="">Product A</a> 
     </li> 
     <li id="product_b"> 
     <a href="" onclick="setActive(this)">Product B</a> 
     </li> 
     <li id="product_c"> 
     <a href="" onclick="setActive(this)">Product C</a> 
     </li>      
    </ul> 

    <script type="text/javascript"> 
     function setActive(obj) { 
      aObj = document.getElementById('productList').getElementsByTagName('li'); 
      for(i=0;i<aObj.length;i++) { 
      if(aObj[i].name == obj.name) { 
       aObj[i].className='active'; 
      } else { 
       aObj[i].className=''; 
      } 
      } 
     } 
    </script> 
</html> 
関連する問題