在 select 后显示列表 DropDownList 值 Razor

Show list after select DropDownList value Razor

我已经为此工作了一段时间,我知道如何使用 JQuery 解决它,但我需要使用服务器端代码解决这个问题,我在 Razor View 事情是:

我有一个 @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>

如果您绝对不想使用 javascript/jQuery,您可以提交表单(带有选定的州 ID)并根据发布的州 ID 获取州并显示。

假设您想在同一视图中显示所选州的城市。

@{

  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" />
}

我个人不喜欢在 razor 视图中放置大量 C# 代码。我通常创建一个视图模型并使用它来传递视图中所需的值。所以你在视图中看到的大部分代码都在我的操作方法中。

如果您更喜欢使用 jQuery/javascript(为什么不呢?),您可以监听第一个下拉列表的更改事件,获取选定的选项值并通过 [=22= 将其发送到服务器] 称呼。让您的服务器操作方法 returns 以 json 格式显示状态,并且您的 ajax 方法的回调可以解析 json 数据并更新城市下拉列表。这是一个 sample 开头