2012-05-10 3 views
1

Веб-сайт MVC. В разделе заголовка главной страницы у меня есть раскрывающийся список с двумя вариантами. Каждый вариант должен перейти на другой контроллер/ActionMethod. Поскольку мне нужно, чтобы это было в разделе заголовка каждой страницы, я помещал его в файл site.master.Развернутая маршрутизация к разному контроллеру/методу действий

код Dropdown:

 <%=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. При последующих выборах того же выбора - переносит меня на локальный хост:/Controller1/Index/Controller1/Индекс/etc ..... должен быть чистый способ сделать это.

Так что я хочу две вещи:

  1. Измененный выбор должен быть удержана.
  2. На последующих выборах, контроль должен быть направлен правильно контроллер/индекс каждый раз, а не контроллер/индекс/контроллер/индекса ... и т.д ..

Спасибо за помощь.

+0

Не могли бы вы разместить отображаемый HTML-код в поле выбора? – marteljn

ответ

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

Вторая проблема легче решить. Это происходит из-за того, что вы устанавливаете местоположение окна на относительно, а не absolute URL. Просто измените это на:

if (SelValue == "One") 
    window.location.href = "/Controller1/Index"; 
else 
    window.location.href = "/Controller2/Index"; 
+0

Спасибо .. это исправило проблему, но я использовал два разных файла site.master для этих двух разных вариантов выпадающего списка. Мне было интересно, как я могу использовать одну и ту же страницу site.master для обеих опций, но иметь возможность контролировать, какие вкладки (ul, li items) отображаться на основе выбора пользователя. – ZVenue

+0

Вы можете использовать ту же технику, что и я, чтобы определить, что выбрать SelectListItem. Просто сравните с 'Request.Path'. –