C# 如何返回此数据并填充Select元素

C# 如何返回此数据并填充Select元素,c#,linq,asp.net-mvc-4,razor,active-directory,C#,Linq,Asp.net Mvc 4,Razor,Active Directory,好的,我相信我拥有正确返回所需数据所需的一切,我只是不知道如何返回它 我有一个带有级联下拉框的页面,它通过JQuery填充另一个框。我目前对jQuery.change进行了编码,对模型进行了编码,对select元素进行了编码。我只是需要控制器的帮助 下面是我希望HTML的外观,如果有更好或不同的方式,当然可以 AD_部门档案由部门经理和每个直接下属填写。我需要弄清楚如何将数据返回到Select元素中 <select id="owner" name="owner"> &

好的,我相信我拥有正确返回所需数据所需的一切,我只是不知道如何返回它

我有一个带有级联下拉框的页面,它通过JQuery填充另一个框。我目前对jQuery.change进行了编码,对模型进行了编码,对select元素进行了编码。我只是需要控制器的帮助

下面是我希望HTML的外观,如果有更好或不同的方式,当然可以

AD_部门档案由部门经理和每个直接下属填写。我需要弄清楚如何将数据返回到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 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);
}
视图:


这是我正在使用的控制器:

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);
        }
下面是我对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');
    });
}

我在等待回复的过程中一直在胡闹,我想知道怎么做。我的回答很好。是的,我想我误解了你的问题,我是想让家长下拉列表。
ViewData["Manager"] = new SelectList(db.GetAllManagers(), "Manager", "Manager");
@Html.DropDownGroupList("ManagerDescription",(SelectList)ViewData["Manager"])
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);
        }
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');
    });
}