Jquery 将选项列表附加到焦点选择

Jquery 将选项列表附加到焦点选择,jquery,asp.net-mvc-3,razor,Jquery,Asp.net Mvc 3,Razor,我有这些非常大的下拉列表(1500项)。我必须在一个页面上使用大量这些大型下拉列表(每个列表1500个项目,每个对象4个列表,每页150个对象)。每个对象的所有这些列表都是相同的 不幸的是,客户要求这种结构,所以我正在寻找一种好方法来创建4个下拉列表,并根据它们关注的选择框重用它们 正在razor中创建列表: var list = ViewData["List"] as IEnumerable<SelectListItem>; IEnumerable<SelectListIte

我有这些非常大的下拉列表(1500项)。我必须在一个页面上使用大量这些大型下拉列表(每个列表1500个项目,每个对象4个列表,每页150个对象)。每个对象的所有这些列表都是相同的

不幸的是,客户要求这种结构,所以我正在寻找一种好方法来创建4个下拉列表,并根据它们关注的选择框重用它们

正在razor中创建列表:

var list = ViewData["List"] as IEnumerable<SelectListItem>;
IEnumerable<SelectListItem> selectEnumerable = null;

if(list != null)
{
    selectEnumerable = list.Select(x => new SelectListItem
    {
        Text = x.Text,
        Value = x.Value.ToString()
    }).OrderBy(x => Convert.ToInt32(x.Value));   
}

@Html.DropDownList("List", selectEnumerable)
var list=ViewData[“list”]作为IEnumerable;
IEnumerable selectEnumerable=null;
如果(列表!=null)
{
selectEnumerable=list.Select(x=>newselectListItem
{
Text=x.Text,
Value=x.Value.ToString()
}).OrderBy(x=>Convert.ToInt32(x.Value));
}
@Html.DropDownList(“列表”,选择可枚举)

我怎样才能做到这一点呢?

如果您想在客户端实现,那么一种方法就是使用jquery的
clone()

因此,您要做的是加载第一个
select
box服务器端,就像您在问题中所做的那样。然后创建另外3个
选择
列表,但将其保留为空,并给它们一个相同的
属性,例如“我的列表类”。最后,在脚本文件中,您可以创建一个在启动时运行一次的函数

JS

  function LoadSelectLists()
  {
    var list = $("#sel1 > option").clone();
    $('.my-list-class').append(list);
  }
<select id="sel1">
  <option value="a">opt1</option>
  <option value="b">opt2</option>
  <option value="c">opt3</option>
</select>
<select id="sel2" class="my-list-class"></select>
<select id="sel3" class="my-list-class"></select>
<select id="sel4" class="my-list-class"></select>
Html

  function LoadSelectLists()
  {
    var list = $("#sel1 > option").clone();
    $('.my-list-class').append(list);
  }
<select id="sel1">
  <option value="a">opt1</option>
  <option value="b">opt2</option>
  <option value="c">opt3</option>
</select>
<select id="sel2" class="my-list-class"></select>
<select id="sel3" class="my-list-class"></select>
<select id="sel4" class="my-list-class"></select>

opt1
opt2
opt3

fiddle:

你的意思是当有人打开下拉列表时,它会填充它,但如果有人打开其他列表之一,它会清除上一个列表并填充所选列表?我想如果用户有一台旧机器,那会有点笨重。@malik是的。我可以补充一点,dropdownlists是jquery组合框。如果这太笨重了,还有其他建议吗?尽管如此,这个页面的速度还是很慢。要么是服务器做的,要么是用户的计算机做的。根据用户机器的速度,您可以将其卸载到用户机器上。但如果不是这样,用户可能会觉得他们的浏览器挂起,而浏览器从阵列加载所有选择框。服务器速度较慢,我们尝试了一个组合框ping数据库,检索列表需要几秒钟。当存在200000个节点时,前端会变得非常慢。我建议不要在单击时“移动”您的选择选项。添加和删除这么多节点可能会导致一些延迟。看看我的答案,你可以尝试一个可能的解决方案。