0

私はMVCが初めてです。MVC3を使用しています。他の複数のビューで共有されている 3 つの部分ビューを作成しました。だから私は別々のdivコントロールに各部分ビューをロードしています

<div data-role="content" id="div_parent" style="background-color: #454545"
        <div id="div1" style="display:none">
            @Html.Partial("_View1")
        </div>
        <div id="div2" style="display:none;">
            @Html.Partial("_View2")
        </div>
        <div id="div3" style="display:none">
            @Html.Partial("_View3")
        </div>
</div>

すべてのビューを非表示にしています

$(document).ready(function () {

            $("#div1").hide();
            $("#div2").hide();
            $("#div3").hide();

        }); // end of change 

    });    

そして、オプションを選択すると、それぞれのビューが表示されます

<select id="views" data-mini="true" data-native-menu="false">
                 <option value="view1" data-mini="true">view1</option>
                 <option value="view2" data-mini="true">view2</option>
                 <option value="view3" data-mini="true">view3</option>
 </select>





function ShowView(viewType) 
{
      $("#div1").show();
      $("#div2").hide();
      $("#div3").hide();
}

しかし、ここでの問題は、3つのビューすべてに同じ名前のjavascript関数があるため、view1のボタンをクリックすると、view2またはview3のjavascript関数が呼び出されます。そのため、div が非表示の JavaScript 関数であっても、HTML ページにロードされます。これは 1 つのシナリオです。他にも問題があります。したがって、私の質問は、この状況を回避する方法です。ビューでhtml全体をレンダリングせずに非表示にするようにビューをロード/アンロードする方法。

4

2 に答える 2

0

私があなたの問題を理解している限り、各部分ビューに JavaScript 関数があり、それらをすべて同時にロードすると、関数の名前が同じであるため、名前の競合が発生します。

ロードした JavaScript を簡単に「アンロード」または「非表示」または「実行解除」することはできません。

競合を避けるために、関数の名前を変更することをお勧めします (たとえば、「名前空間」に配置するなど)。

また、あなたが提供するコード スニペットは、あなたが抱えている実際の問題に関する情報をほとんどまたはまったく提供しません。

于 2013-09-04T20:02:56.800 に答える
0

この状況を回避するには、値をパラメーターとして受け入れ、それぞれの div を非表示または表示できることに基づいて、単一の JavaScript 関数があることを確認してください。

例:これは単なるプロトタイプです

function ShowView(id) 
{
  switch(id){
  case "div1" :
     $("#div1").show();
     $("#div2").hide();
     $("#div3").hide();  
     break;  
  .... // Add other cases
  }
}    
于 2013-08-30T06:18:38.893 に答える