2016-08-18 2 views
0

Я работал некоторое время на этом, я знаю, как его разрешить с помощью JQuery, но мне нужно решить это только с использованием кода на стороне сервера, я в Razor View дело в том:Показать список после выбора значения DropDownList Razor

у меня есть @Html.DropDownlist что показывают некоторые государства из США, и после нажатия одной из государств с DropDownList то я хочу показать некоторые города, которые принадлежат государству, выбранным с помощью других DropDownList, я не как получить значение из выбранного поля, используя Razor syntax, а затем отобразить города, принадлежащие государству в другом DropDownList, когда выбрано одно государство, я использую SelectList, и у меня есть StateID, чтобы связать города ... Я показываю все штаты внутри работающего DropDownList. Вот мой код:

Это только два класса, которые я использую, чтобы заполнить SelectList с некоторыми свойствами:

public States(int id, string name, List<string> list) 
     { 
      StateID = id; 
      Name = name; 
      Cities = list; 
     } 
     public int StateID { get; set; } 
     public string Name { get; set; } 
     public List<string> Cities { get; set; } 
    } 


    public static class Fill 
    { 
     public static List<States> GiveMeStates() 
     { 
      List<States> li = new List<States>() { 
      new States(1, "Alabama",new List<string> {"Adamsville", "Addison", "Anderson","Anniston", "Arab" }), 
      new States(2,"Alaska", new List<string> {"Anchorage","Juneau","Fairbanks","Sitka"}), 
      new States(3,"Arizona", new List<string> { "Avondale", "Benson", "Besbee"}) 
      }; 
      return li; 
     } 
    } 

И теперь это мой Razor Вид:

@using RazorMVC.Models; 

@{ 
    List<States> aux = Fill.GiveMeStates(); 
    SelectList states = new SelectList(aux, "StateID", "Name"); 
} 
<form> 
    @Html.DropDownList("ddlStates", states); 

</form> 
+1

Вам необходимо отправить форму в метод, который перенаправляет на другой метод, который отображает города на основе выбранного состояния (и передает значение выбранного состояния этому методу) –

+1

Почему вы Не хотите использовать JQuery? Я думаю, что для привязки многоуровневого 'dropdown' JQuery - хороший вариант, без обратной передачи на страницу! –

+0

@ StephenMuecke благодарит за идею, я понимаю, что вы говорите, но как я могу опубликовать свою форму при выборе элемента из раскрывающегося списка и без кнопки отправки? Это возможно без использования кнопки отправки? Я не уверен, как это сделать, просто используя синтаксис C# и Razor, спасибо еще раз :) – AlexGH

ответ

1

Если вы абсолютно не хотите использовать javascript/jQuery, вы можете отправить форму (с выбранным идентификатором состояния) и получить состояния на основе опубликованного идентификатора состояния и показать это.

Предполагая, что вы хотите показать города для выбранного состояния в том же виде.

@{ 

    var stateId = Request.QueryString["ddlStates"] as string; 
    List<States> aux = Fill.GiveMeStates(); 
    SelectList states = new SelectList(aux, "StateID", "Name"); 
    List<SelectListItem> cities = new List<SelectListItem>(); 
    if (!String.IsNullOrEmpty(stateId)) 
    {  
    var state = aux.FirstOrDefault(f => f.StateID == Convert.ToInt32(stateId)); 
    if (state != null) 
    { 
     cities = state.Cities 
         .Select(x => new SelectListItem {Value = x, Text = x}).ToList(); 
    } 
    } 
} 
<label>Select a state and hit submit </label> 
@using (Html.BeginForm("Index", "Home", FormMethod.Get)) 
{ 
    @Html.DropDownList("ddlStates", states) 
    <label>Cities < /label> 
    @Html.DropDownList("City", cities) 
    <input type="submit" /> 
} 

Я лично предпочитаю не помещать много кода C# в виды бритвы. Обычно я создаю модель представления и использую ее для передачи значений, необходимых в представлении. Таким образом, большинство из приведенного выше кода вы видите в моем методе действий.

Если вы предпочитаете использовать jQuery/javascript (почему бы и нет?), Вы можете прослушать событие изменения первого раскрывающегося списка, получить выбранное значение параметра и отправить его на сервер через вызов ajax. Пусть ваш метод действия сервера возвращает состояния в формате json, а ваш обратный вызов метода ajax может анализировать данные json и обновлять раскрывающийся список городов. Вот sample, чтобы начать с

Смежные вопросы