组合框asp.net mvc

时间:2014-05-20 06:15:26

标签: c# asp.net asp.net-mvc drop-down-menu asp.net-mvc-5

我有来自Bus.cs的Index.cshtml脚手架中的数据表

    public class Bus
    {
        public int BusID { get; set; }

        public int BusOwnerID { get; set; }

        public string RegistrationNo { get; set; }
    }

在索引页面中,我需要在BusOwner.cs中包含一个包含BusOwnerID和BusOwnerName的下拉列表

    public class BusOwner
    {
        public int BusOwnerID { get; set; }

        public string BusOwnerName { get; set; }

        public string Moblie { get; set; }

        public string EmailID { get; set; }
    }

在控制器中我有以下内容,

    public ActionResult Index()
    {
        ViewBag.Genres = db.BusOwners.Select(i => new SelectListItem { Value = i.BusOwnerID.ToString(), Text = i.BusOwnerName });

        return View(db.Buses.ToList());
    }

在视图中,index.cshtml我需要一个带有BusOwnerID和BusOwnerName的下拉框。在选择时,我需要显示选定BusOwnerID下的公交车的详细信息。

我尝试了以下

    @Html.DropDownListFor(model => model.BusOwnerID, new SelectList(ViewBag.Genres), "Choose... ")

但是发生错误。

        CS1061: 'System.Collections.Generic.IEnumerable<RaspberryPi.Models.Bus>' does not contain a definition for 'BusOwnerID' and no extension method 'BusOwnerID' accepting a first argument of type 'System.Collections.Generic.IEnumerable<RaspberryPi.Models.Bus>' could be found (are you missing a using directive or an assembly reference?)

Index.cshtml

    @model IEnumerable<RaspberryPi.Models.Bus>

    @{
        ViewBag.Title = "Buses";
    }

    <div class="btn-group">
        <a href="/Buses/Create" class="btn btn-primary btn-lg">Create New</a>

    </div>

    @*@Html.LabelFor(model => model.BusOwnerID)
    @Html.DropDownListFor(model => model.SelectRegionId, Model.Regions, "Choose... ")


    @Html.DropDownList("drop", new SelectList(ViewBag.Genres));*@

    <div id="Ttable" style="background:#f5f5f5;position:relative;width:100%;height:25%;">
        <table id="example" class="display" cellspacing="0" width="100%">
            <thead>
                <tr>
                    <th>@Html.DisplayNameFor(model => model.RegistrationNo)</th>
                    <th>@Html.DisplayNameFor(model => model.BusTypes)</th>
                    <th>Edit</th>
                </tr>
            </thead>
            <tbody>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>
                            @Html.DisplayNameFor(model => model.RegistrationNo)
                        </td>
                        <td>
                            @Html.DisplayNameFor(model => model.BusTypes)
                        </td>
                        <td>
                            <div class="btn-group">
                                <button type="button" class="btn-primary btn-xs" onclick="location.href = '/Buses/Details/@item.BusID';"><span class="glyphicon glyphicon-th"></span></button>
                                <button type="button" class="btn-success btn-xs" onclick="location.href = '/Buses/Edit/@item.BusID';"><span class="glyphicon glyphicon-pencil"></span></button>
                                <button type="button" class="btn-danger btn-xs" onclick="location.href = '/Buses/Delete/@item.BusID';"><span class="glyphicon glyphicon-remove"></span></button>
                            </div>
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>

我如何实现这一目标?

请帮忙, 感谢。

2 个答案:

答案 0 :(得分:1)

这样做

在创建下拉菜单之前,在您的视图上列出BusOwner

var busOwnerList=BusOwner.GetAll(); //Make static method in your class to return all owner

现在

@Html.DropDownListFor(model => model.BusOwnerID, new SelectList(busOwnerList, "BusOwnerID", "BusOwnerName") as SelectList, "Choose... ")

答案 1 :(得分:0)

错误表示模型中没有属性BusOwnerId。 此外,错误告诉我们模型的类型为IEnumerable

在您的情况下,BusOwnerId仅存在于Bus的单个实例上,而不存在于总线集合中。所以有两种选择。

1将单个总线作为模型返回视图

而不是:

  

return View(db.Buses.ToList());

尝试

return View(db.Buses.FirstOrDefault());

这将从数据库返回第一个总线。

2或者您可以遍历模型中的每个总线条目并显示每个总线的下拉框:

foreach(var bus in Model)
{
     @Html.DropDownListFor(x => bus.BusOwnerID, new SelectList(ViewBag.Genres), "Choose... 
}

请注意,在lamda中我绑定到x => bus.busOwnerId而不是x => x.BusOwnerId,因为x.BusOwnerId表示BusOwnerId是模型上的属性。这不是因为模型是一个集合。