下拉到无缝控制器/操作方法的路由

时间:2012-05-10 19:31:30

标签: javascript jquery asp.net-mvc asp.net-mvc-3

MVC网站 - 在主页标题部分,我有一个下拉列表中有两个选项。每个选项都应路由到不同的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";      
}

这种方法存在两个问题:

  1. 更改选择时 - 新选择的选项不会保留。即使网页显示新的控制器/操作方法视图,下拉菜单也会切换回原始选项...

  2. 在后续选择相同的选项时 - 将我带到localhost:/ Controller1 / Index / Controller1 / Index / etc .....必须有一个干净的方法来执行此操作。

    < / LI>

    所以我想要两件事:

    1. 应保留更改的选择。
    2. 在后续选择中,控件需要每次都正确路由到控制器/索引,而不是控制器/索引/控制器/索引......等。
    3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

要解决问题1,您必须设置Selected的{​​{1}}属性。所以我会改变你的代码来生成这样的下拉列表:

SelectListItems

第二个问题更容易解决。它来自于您将窗口位置设置为 relative ,而不是绝对 URL。只需将其更改为:

@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()" } )