2013-05-30 74 views
0

好吧我相信我有我需要的一切正確返回所需的數據,我只是不知道如何返回它。如何返回此數據並填充選擇元素

我有一個頁面帶有級聯下拉框,通過JQuery填充另一個框。我目前有jQuery().change()甚至編碼,我有模型編碼,我有選擇元素編碼。我只需要控制器的幫助。

下面是我希望HTML看起來(如果有更好或不同的方式,當然可以)。

AD_DepartmentProfile填充了部門經理和每個直接報告。我需要弄清楚如何將數據返回到Select元素。

<select id="owner" name="owner"> 
     <optgroup label="Manager"> 
      <option value="john">John Dow</option> 
     </optgroup> 
     <optgroup label="Members"> 
       <option value="jane">Jane Doe</option> 
       <option value="josh">Josh Doe</option> 
     </optgroup> 
</select> 

這裏是我的模型:

public class AD_DepartmentProfile 
    { 
     public AD_DepartmentProfile() 
     { 
      this.AD_UserProfile = new HashSet<AD_UserProfile>(); 
      this.AD_ManagerProfile = new AD_UserProfile(); 
     } 

     public string name { get; set; } 

     public virtual AD_UserProfile AD_ManagerProfile { get; set; } 
     public virtual ICollection<AD_UserProfile> AD_UserProfile { get; set; } 
    } 

public class AD_UserProfile 
    { 
     public string distinguishedName { get; set; } 
     public string email { get; set; } 
     public string manager { get; set; } 
     public string name { get; set; } 
     public string userPrincipalName { get; set; } // Useful if we need to allow a user to 'log on' as a different user. 
     public string userName { get; set; } 
    } 

這裏是我的Jquery:

jQuery('#departmentID').change(function() { 
     var department = jQuery('#departmentID'); 
     var value = department.val(); 
     var text = department.children("option").filter(":selected").text(); 
     GetOwnerList(value, text); 
    }); 

function GetOwnerList(departmentid, departmentText) { 
    jQuery('#owner').find('option').remove(); 

    jQuery.getJSON("/MasterList/GetOwners/" + departmentid, null, function (data) { 
     var html; 
     var len = data.length; 
     for (var i = 0; i < len; i++) { 
      if (data[i] && data[i] != "") html += '<option value = "' + data[i].functionID + '">' + data[i].name + '</option>'; 
     } 
     jQuery('#owner').append(html); 
     jQuery('#owner').trigger('liszt:updated'); 
    }); 

這裏是控制器:

public ActionResult getOwners(int id = 0) 
{ 
    // Load up the department record 
    Department department = db.Department.Find(id); 

    // loads up the manager and direct reports into the model. 
    AD_DepartmentProfile dp = new ActiveDirectory().GetDepartmentInfo(department.name, department.owner); 
} 

回答

0

這裏是我使用的控制器:

public ActionResult GetOwners(int id = 0) 
     { 
      Departments department = db.Department.Find(id); 

      AD_DepartmentProfile dp = new ActiveDirectory().GetDepartmentInfo(department.name, department.owner); 

      return this.Json(dp, JsonRequestBehavior.AllowGet); 
     } 

A nd這裏是我對jQuery所做的更改。

function GetOwnerList(departmentid, departmentText) { 
    jQuery('#owner').find('option').remove(); 

    jQuery.getJSON("/MasterList/GetOwners/" + departmentid, null, function (data) { 
     var html; 
     var len = data.AD_UserProfile.length; 
     console.log(data); 
     if (data.AD_ManagerProfile.name != null) { 
      html += '<optgroup label="Manager">'; 
      html += '<option value = "' + data.AD_ManagerProfile.username + '">' + data.AD_ManagerProfile.name + '</option>'; 
      html += '</optgroup>'; 
     } 

     if (len != 0) { 
      html += '<optgroup label="Members">'; 
      for (var i = 0; i < len; i++) { 
       html += '<option value = "' + data.AD_UserProfile[i].username + '">' + data.AD_UserProfile[i].name + '</option>'; 
      } 
      html += '</optgroup>'; 
     } 

     jQuery('#owner').append(html); 
     jQuery('#owner').trigger('liszt:updated'); 
    }); 
} 
0

要在選擇列表中得到分組你需要寫一些自定義的東西。看看這個擴展:

Support for optgroup in dropdown

從那裏,你可以使用控制器喂視圖等。只是你決定去與任何擴展替換:

控制器:

ViewData["Manager"] = new SelectList(db.GetAllManagers(), "Manager", "Manager"); 

查看:

@Html.DropDownGroupList("ManagerDescription",(SelectList)ViewData["Manager"]) 
+0

我在等待迴應,並想出如何做到這一點,正在搞亂它。發表回答。 –

+0

不錯。是的,我想我誤解了你的問題,並正在爲父母下拉。 –