C# 填充到dropdownlist中

C# 填充到dropdownlist中,c#,asp.net-mvc,drop-down-menu,C#,Asp.net Mvc,Drop Down Menu,下面的这组代码以2级显示选择列表,如图所示 @for (int i = 0; i < Model.AccessRequest.RoomCheckBoxes.Count; i++) { <li> @Html.CheckBoxFor(m => m.AccessRequest.RoomCheckBoxes[i].IsCheck, new

下面的这组代码以2级显示选择列表,如图所示

@for (int i = 0; i < Model.AccessRequest.RoomCheckBoxes.Count; i++)
                    {
                        <li>
                            @Html.CheckBoxFor(m => m.AccessRequest.RoomCheckBoxes[i].IsCheck, new { @class = "parent" })
                            @Html.LabelFor(m => m.AccessRequest.RoomCheckBoxes[i].IsCheck, Model.AccessRequest.RoomCheckBoxes[i].SiteName + " - " + Model.AccessRequest.RoomCheckBoxes[i].RoomName)
                            @Html.HiddenFor(m => m.AccessRequest.RoomCheckBoxes[i].RoomId)
                            @Html.HiddenFor(m => m.AccessRequest.RoomCheckBoxes[i].RoomName)
                            @Html.HiddenFor(m => m.AccessRequest.RoomCheckBoxes[i].SiteName)
                            <div class="racksfor" style="margin-left:20px;">
                                <ul class="suiterecord">
                                    @for (int j = 0; j < Model.AccessRequest.RoomCheckBoxes[i].Racks.Count; j++)
                                    {
                                        <li style="float:left;">
                                            @Html.CheckBoxFor(m => m.AccessRequest.RoomCheckBoxes[i].Racks[j].IsCheck, new { @class = "child chkboxCss" })
                                            <div class="ARSLabel">
                                                @Html.LabelFor(m => m.AccessRequest.RoomCheckBoxes[i].Racks[j].IsCheck, Model.AccessRequest.RoomCheckBoxes[i].Racks[j].RackName + " " + Model.AccessRequest.RoomCheckBoxes[i].Racks[j].Alias)
                                                @*@Model.AccessRequest.RoomCheckBoxes[i].Racks[j].Alias*@
                                                @Html.HiddenFor(m => m.AccessRequest.RoomCheckBoxes[i].Racks[j].RackName)
                                            </div>
                                        </li>
                                        if ((j + 1) % 5 == 0)
                                        {
                                        @:</ul><div style='clear:both'></div><br><ul class='suiterecord'>
                                        }
                                    }
                                </ul>
                            </div>
                            <div style='clear:both'></div><br>
                        </li>
                    }
@for(int i=0;i
@CheckBoxFor(m=>m.AccessRequest.roomcheckbox[i].IsCheck,new{@class=“parent”})
@Html.LabelFor(m=>m.AccessRequest.RoomCheckBox[i].IsCheck,Model.AccessRequest.RoomCheckBox[i].SiteName+“-”+Model.AccessRequest.RoomCheckBox[i].RoomName)
@Html.HiddenFor(m=>m.AccessRequest.roomcheckbox[i].RoomId)
@Html.HiddenFor(m=>m.AccessRequest.RoomCheckBox[i].RoomName)
@Html.HiddenFor(m=>m.AccessRequest.RoomCheckBox[i].SiteName)
    @对于(int j=0;j @Html.CheckBoxFor(m=>m.AccessRequest.roomcheckbox[i].Racks[j].IsCheck,new{@class=“child chkboxCss”}) @Html.LabelFor(m=>m.AccessRequest.RoomCheckBox[i].Racks[j].IsCheck,Model.AccessRequest.RoomCheckBox[i].Racks[j].Racks[j].RackName+“”+Model.AccessRequest.RoomCheckBox[i].Racks[j].Alias) @*@Model.AccessRequest.RoomCheckBox[i].Racks[j].别名*@ @Html.HiddenFor(m=>m.AccessRequest.RoomCheckBox[i].Racks[j].RackName) 如果((j+1)%5==0) { @:

    } }

}

如何将其更改为2下拉列表,以便dropdownlist 1=CO3-Suite 80和dropdownlist 2显示与所选套件关联的机架

此控制器将房间列表返回到前端

private List<RoomWithCheckBox> populateRooms(IEnumerable<int> selectedRoomIds, Int32? companyID = null)
    {
        if (selectedRoomIds == null)
            selectedRoomIds = new List<int>();

        var currentSession = Helpers.GetCurrentSession(User.Identity);
        var roomsResponse = repository.Rooms.GetAll(companyId: (companyID ?? currentSession.CompanyId));
        if (roomsResponse.Status == ReturnStatus.SessionInvalid)
        {
            throw new InvalidSessionException();
        }
        if (roomsResponse.Status == ReturnStatus.Success)
        {
            //return roomsResponse.Result.Select(x => new SuperAdminRoom
            //{
            //    RoomName = x.Name,
            //    RoomId = x.Id,
            //    IsCheck = selectedRoomIds.Contains(x.Id)
            //}).ToList();

            var Sar = new List<RoomWithCheckBox>();
            var Roomz = roomsResponse.Result.ToList();
            for (int i = 0; i < Roomz.Count(); i++)
            {
                var rmz = Roomz[i];
                var Suite = new RoomWithCheckBox()
                {
                    RoomId = rmz.Id,
                    RoomName = rmz.Name,
                    IsCheck = selectedRoomIds.Contains(rmz.Id),
                    Racks = new List<RackWithCheckBox>()
                };
                if (rmz.Floor != null && rmz.Floor.Site != null)
                    Suite.SiteName = rmz.Floor.Site.Name;

                Sar.Add(Suite);
                foreach (var rackz in rmz.Racks)
                {
                    var CompanyRacks = new RackWithCheckBox()
                    {
                        RackName = rackz.ServiceId,
                        RackId = rackz.Id,
                        Alias = rackz.Alias,
                    };
                    Suite.Racks.Add(CompanyRacks);
                }
            }

            return Sar;
        }
        else if (roomsResponse.Status == ReturnStatus.NoRecords)
        {
            return new List<RoomWithCheckBox>();
        }
        else
        {
            throw new Exception(roomsResponse.Error);
        }
    }
private List populateRooms(IEnumerable selectedRoomIds,Int32?companyID=null)
{
如果(selectedRoomIds==null)
selectedRoomIds=新列表();
var currentSession=Helpers.GetCurrentSession(User.Identity);
var roomsResponse=repository.Rooms.GetAll(companyId:(companyId??currentSession.companyId));
if(roomsResponse.Status==ReturnStatus.SessionInvalid)
{
抛出新的InvalidSessionException();
}
if(roomsResponse.Status==ReturnStatus.Success)
{
//return rooms response.Result.Select(x=>newsuperadminroom
//{
//RoomName=x.Name,
//RoomId=x.Id,
//IsCheck=selectedRoomIds.Contains(x.Id)
//}).ToList();
var Sar=新列表();
var Roomz=roomsResponse.Result.ToList();
对于(int i=0;i
假设您的目的是创建级联dropdownlist,并将2个
DropDownListFor
绑定到2个属性作为第一步:

@Html.DropDownListFor(m => m.AccessRequest.SelectedRoom, new SelectList(Model.Rooms, "RoomId", "RoomName"), "Select a Room", new { @class = "form-control" })

@Html.DropDownListFor(m => m.AccessRequest.SelectedRack, new { @class = "form-control" })
然后处理第一个下拉列表的
onchange
事件,将相关值插入第二个下拉列表:

$('#SelectedRoom').change(function () {
    var url = '@Url.Action("GetRacks", "ControllerName")';
    $.getJSON(url, { id: $(this).val() }, function (result) {
        if (!result) {
            return;
        }

        $('#SelectedRack').append($('<option></option>').val('').text('Select Rack'));
        $.each(result, function(idx, item) {
            $('#SelectedRack').append($('<option></option>').val(item.Value).text(item.Text));
        });
    }
});
[HttpGet]
public JsonResult GetRacks(int id) 
{
    // other stuff related to create list of racks here

    // assume 'ListOfRacks' has type of 'List<Rack>' which contains entire rack information
    var racks = ListOfRacks.Where(x => x.RackId == id)
                           .Select(x => new { Value = x.RackId, Text = x.RackName + " " + x.Alias });

    return Json(racks, JsonRequestBehavior.AllowGet);
}
@Html.DropDownListFor(m => m.AccessRequest.SelectedRoom, Model.RoomsList, "Select a Room", new { @class = "form-control" })
请注意,对于
房间
的每个属性(即
房间名
站点名
)使用多个
@Html.HiddenFor
帮助程序变得不必要,因为您只需在提交表单后根据
房间ID
值查询即可获得所有帮助程序

附加说明:

要将两个属性值组合成单个文本,可以使用相同的技术连接
RackName
Alias
的属性值,如下所示:

// assume 'Rooms' hold collection of all available rooms
model.RoomsList = new SelectList((from room in Rooms
                                  select new {
                                      RoomId = room.RoomId,
                                      RoomName = room.SiteName + " - " + room.RoomName 
                                  }),
                                  "RoomId",
                                  "RoomName",
                                  null);
然后将上面的
SelectList
实例传递到第一个下拉列表中:

$('#SelectedRoom').change(function () {
    var url = '@Url.Action("GetRacks", "ControllerName")';
    $.getJSON(url, { id: $(this).val() }, function (result) {
        if (!result) {
            return;
        }

        $('#SelectedRack').append($('<option></option>').val('').text('Select Rack'));
        $.each(result, function(idx, item) {
            $('#SelectedRack').append($('<option></option>').val(item.Value).text(item.Text));
        });
    }
});
[HttpGet]
public JsonResult GetRacks(int id) 
{
    // other stuff related to create list of racks here

    // assume 'ListOfRacks' has type of 'List<Rack>' which contains entire rack information
    var racks = ListOfRacks.Where(x => x.RackId == id)
                           .Select(x => new { Value = x.RackId, Text = x.RackName + " " + x.Alias });

    return Json(racks, JsonRequestBehavior.AllowGet);
}
@Html.DropDownListFor(m => m.AccessRequest.SelectedRoom, Model.RoomsList, "Select a Room", new { @class = "form-control" })

对于Windows程序,组合框有一个事件,当我们从组合框中选择一个项目时,可以调用该事件,所以对于web,它也应该有相同的事件?以windows程序为例,我将创建如下内容:this.comboBoxSelectDoc.SelectedIndexChanged+=this.comboBoxSelectDoc\u SelectedIndexChanged