2012-09-17 25 views
4

我有一個包含兩個@Html.DropDownListFor助手視圖:從下拉列表幫手刪除元素

<div class="editor-field"> 
     @Html.DropDownListFor(model => model.Employee, (IEnumerable<SelectListItem>)ViewBag.emps, "--Select--", new { style = "width:150px", id = "ddl1"}) 
     @Html.ValidationMessageFor(model => model.Employee) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.Employee2, (IEnumerable<SelectListItem>)ViewBag.emps, "--Select--", new { style = "width:150px", id = "ddl2"}) 
     @Html.ValidationMessageFor(model => model.Employee2) 
    </div> 

它們填充像這樣:

public ActionResult Create() 
    { 
     List<Employees> emps = new List<Employees>(); 
     emps.Add(new Employees { Id = 0, Name = "Michael Jordan" }); 
     emps.Add(new Employees { Id = 1, Name = "Magic Johnson" }); 
     emps.Add(new Employees { Id = 2, Name = "Larry Bird" }); 

     var items = emps.Select(i => new SelectListItem 
     { 
      Value= i.Id.ToString(), 
      Text =i.Name 
     }); 
     ViewBag.emps = items; 
     return View(); 
    } 

如何刪除第一DDL的所選項目從第二個DDL? 我設法使用jQuery這樣選擇的項目:

<script type="text/javascript"> 
$(function() { 
    $("#ddl1").change(function() { 
     alert($("#ddl1").val()); 
    }); 
}); 
</script> 

不過,我不能找到一種方法,用它爲我的目的。

+3

[在克隆()操作過程中如何刪除選定元素]的可能重複(http://stackoverflow.com/questions/2882470/how-to-remove-the-selected-element-during-a-clone-操作) –

回答

3

像這樣的東西必須爲你工作:

$(function(){ 
    var lists = $('#ddl1, #ddl2'); 
    lists.change(function(){ 
     var elm = $(this); 
     lists.find('option').show(); 
     var option = lists.not('#' + this.id) 
      .find('option[value="' + elm.val() +'"]').hide(); 

     if(option.is(':selected')) 
     { 
      var select = option.closest('select'); 
      select.val(select.find('option:visible:first').val()); 
     } 
    }); 
}); 

用於演示鏈接:jsfiddle.net

補充: 發佈的解決方案有IE瀏覽器的問題,替代方式是使用禁用屬性:jsfiddle.net/cxZ2H/1/

+0

在Firefox中很好用,但在IE中不能用。任何方式使其在Internet Explorer中工作? – Yoav

+0

@Yoav是的,這是我的錯,IE不允許'display:none'選項([proof](http://stackoverflow.com/questions/2324250/style-display-none-doesnt-work-on-選項標籤在鉻 - 但它在做firefo))。如果解決方案沒問題,可選解決方案使用禁用?這裏是鏈接:[jsfiddle.net/cxZ2H/1/](http://jsfiddle.net/cxZ2H/1/) – webdeveloper

2

這絕對是一個客戶端腳本問題,而不是服務器端的ASP.NET MVC問題。

這裏是我的建議:

  1. 創建項目列表的服務器端。
  2. 但是,當你把它帶到客戶端,保持一個不可改變的主副本。用它來填充你的第一個select
  3. 當用戶從第一個列表中選擇一個項目時,先刪除第一個列表,然後減去所選項目。

這裏有一個的jsfiddle:http://jsfiddle.net/Fsf7g/1/