如何从我的本地托管数据库填充下拉菜单?

时间:2015-04-10 10:38:04

标签: c# asp.net sql-server database asp.net-mvc-4

我现在真的很难过。我已经坚持这个问题好几天了,坦率地说,我已经厌倦了它。

我有这个数据库表:https://gyazo.com/9d1b014ecdba1e244c2f6957b6d9397c

(注意FlightsTable

我的目标是根据“离开”部分中的值填充下拉菜单。

我尝试过很多东西,但我仍然无法掌握它。

这是我的模特:

public class FlightModel
{
    public int FlightID { set; get; }
    public string Departure { set; get; }
    public string Arrival { set; get; }
    public int NumberOfSeats { set; get; }
    public int NumberOfFlights { set; get; }

}

控制器:

    public ActionResult BookFlight()
    {
        return View();
    }

FlightDBEntities(来自FlightsDBModel)

namespace Project_v3.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class FlightsDBEntities : DbContext
    {
        public FlightsDBEntities()
            : base("name=FlightsDBEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<FlightsTable> FlightsTables { get; set; }
    }
}

文件的屏幕截图:http://gyazo.com/31b447387f349fbbe541f44a358c3096

如何在BookFlight的视图中进行下拉列表工作?我正在努力解决这个一步一步的解决方案,这样我就能理解每一步都会受到高度赞赏。拜托,谢谢你。

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点,这是一个例子:

您需要实际创建选择列表的内容:

public SelectList GetAsSelectList()
{
    var depts = from f in db.FlightsTables 
                        select new SelectListItem
                        {
                            Value = f.Departure,
                            Text = f.Departure
                        };
     return new SelectList(depts, "Value", "Text");
}

如果偏离在他们自己的表格中,那么最好从那里选择它们,使用Id主键字段作为选择列表的value字段

我认为选择列表将显示在与FlightModel相同的页面上。如果是这种情况,那么您的模型需要选择列表的属性:

public SelectList DepartureList { get; set; }

您的控制器方法需要创建一个FlightModel实例,用您想要显示的内容填充它(包括选择列表)并将其传递给视图:

public ActionResult BookFlight()
{
   var model = new FlightModel
   {
       DepartureList = GetAsSelectList()
   };
   return View(model);
}

根据您希望用户对选择列表的操作,您可以在视图中显示它:

@Html.DropDownList("Departure", Model.DepartureList)

答案 1 :(得分:0)

在您的控制器中,选择不同的离场

IEnumerable<string> departures = db.FlightsTables.Select(f => f.Departure).Distinct();

并分配给ViewBag属性(或者更好,使用带有SelectList属性的视图模型)

ViewBag.DepartureList = new SelectList(departures);

并在视图中(不确定要绑定的属性 - 您还没有显示Booking的模型)

@Html.DropDownListFor(m => m.YourProperty, (SelectList)ViewBag.DepartureList, "-Please select-")

我怀疑您可能需要修改航班表。您有一个ID列,但有一列列表中的航班数量。当然,您需要有关每个航班的出发和到达时间的信息吗?

修改

除了评论之外,您的预订模式可能类似于。

public class BookingVM
{
  public List<FlightModel> FlightList { get; set; } // to display available flights
  public string Departure { get; set; } // bind to DepartureList
  public int FlightID { get; set; } // bind to FlightID in a dropdown that displays the arrival locations
  public int Seats { get; set; } // number of seats booked
  public SelectList DepartureList { get; set; } // unique departures
}

您需要处理离境下拉列表中的.change()事件,使用ajax将选定的出发传递给控制器​​方法,该方法返回flightID和到达位置(可能还有每个航班的可用座位数)并使用它来填充第二个下拉列表(绑定到FlightID并显示到达位置)。