1

MVC Web サイト - ホームページのヘッダー セクションに、2 つのオプションを含むドロップダウンがあります。各オプションは、異なる Controller/ActionMethod にルーティングする必要があります。これはすべてのページのヘッダー セクションに配置する必要があるため、site.master ファイルに配置します。

ドロップダウン コード:

      <%=Html.DropDownList("OneOrTwo", 
       new List<SelectListItem>
      {
       new SelectListItem{ Text="One", Value = "One" }, 
       new SelectListItem{ Text="Two", Value = "Two" }                       
      }
      , new { @style = "background-color:#f00; border: none;", onchange = 

       "fnNum()" }                    

      )%>

JavaScriptファイルには、ドロップダウンの選択に基づいて異なるコントローラー/アクションメソッドにルーティングするこれがあります。

function fnNum()
{   
    var e = document.getElementById("OneOrTwo");
    var SelValue = e.options[e.selectedIndex].value;

    if (SelValue == "One")
        window.location.href = "Controller1/Index";  

    else
       window.location.href = "Controller2/Index";      
}

このアプローチには 2 つの問題があります。

  1. 選択が変更されると、新しく選択されたオプションは保持されません。Web ページに新しいコントローラー/アクション メソッド ビューが表示されている場合でも、ドロップダウンは元の選択に戻ります...

  2. 同じ選択を続けて選択すると、localhost:/Controller1/Index/Controller1/Index/etc..... に移動します。これを行うには、クリーンな方法が必要です。

だから私は2つのことが欲しい:

  1. 変更された選択を保持する必要があります。
  2. その後の選択では、コントロールは、コントローラー/インデックス/コントローラー/インデックスなどではなく、毎回コントローラー/インデックスに適切にルーティングされる必要があります。

助けてくれてありがとう。

4

1 に答える 1

2

問題 1 を修正するには、 のSelectedプロパティを設定する必要がありますSelectListItems。したがって、ドロップダウンを次のように生成するようにコードを変更します。

@Html.DropDownList("FooOrBar", new List<SelectListItem> {
        new SelectListItem{ Text="One", Value = "Two", Selected = Request.Path == "/Controller1/Index" }, 
        new SelectListItem{ Text="One", Value = "Two", Selected = Request.Path == "/Controller1/Index" }                       
    }, new { @style = "background-color:#f00; border: none;", onchange = "fnNum()" } )

2 番目の問題は解決が容易です。これは、ウィンドウの場所を絶対URLではなく相対URL に設定していることが原因です。次のように変更するだけです。

if (SelValue == "One")
    window.location.href = "/Controller1/Index";  
else
   window.location.href = "/Controller2/Index";  
于 2012-05-10T19:48:12.140 に答える