2016-10-30 53 views
1

我有飞机和FleetItem模型的模型:ASP.net核心:<select>许多实体

Aircraft.cs:

public class Aircraft : IDbEntity 
{ 
    [Key] 
    public int Id { get; set; } 

    public string Type { get; set; } 

    public int? MaxAltitude { get; set; } 

    public int? MaxSpeed { get; set; } 

    public int? NOfFirstClassSeats { get; set; } 

    public int? NOfBusinessClassSeats { get; set; } 

    public int? NOfEconomyClassSeats { get; set; } 
} 

FleetItem.cs:

public class FleetItem : IDbEntity 
{ 
    [Key] 
    public int Id { get; set; } 

    public string RegNumber { get; set; } 

    public int AirplaneId { get; set; } 

    [ForeignKey("AirplaneId")] 
    public virtual Aircraft Airplane { get; set; } 
} 

所以,实际上 - FleetItem包含飞机的外键和飞机的注册号码(注册号码是唯一的)。

查看Index.cshtml,我现在有:

@model Core.Models.FleetItem 
@{ 
    ViewData["Title"] = $"Add new plane to fleet"; 
} 

<h2>@ViewData["Title"]</h2> 

<form method="post" asp-controller="Fleet" asp-action="Add" asp-antiforgery="true"> 
    <!-- todo add plane select --> 

    <div class="form-group"> 
     <label asp-for="RegNumber" class="control-label">Registration number:</label> 
     <input asp-for="RegNumber" class="form-control" type="text" /> 
     <span asp-validation-for="RegNumber"></span> 
    </div> 
    <div class="form-group"> 
     <input type="submit" value="Add" class="btn btn-default" /> 
    </div> 
</form> 

我需要FleetItem飞机的链接。

解决方案,我发现:选择所有飞机和他们通过进入视野并输出使用<select>

该解决方案适用于当我有几架飞机。但是,如果我有1000多架飞机?这将是太大的<select>名单。所以,我想到任何返回飞机的搜索。这将是非常棒的。但是,如何实现这一点?我认为解决方案存在但找不到它。

或者你可以建议最好的解决办法?

回答

1

在用户体验方面的最佳方法是添加一个搜索框,将继续飞行筛选你的飞机,即它会发出到服务器显示的请求说,前10名的元素。这是实现这种功能的常用方法。

我不知道,如果你可以很容易地在MVC模式实现直接,但如果你有一些客户端框架,你可以用它来实现这一目标。例如。你可以使用受欢迎的select2控制,可以做这样的事情。顾名思义,它与普通的选择相比是一种改进,可以添加所需的所有东西。

当然,你总是可以自己实现一个简单的情况下,用普通的输入和一个div弹出。

P.S.你可以google一下如何连接select2和MVC,例如here。但通常它不应该是一个大问题,因为它只是在web api中的一些AJAX请求,您需要使用数据+一些客户端脚本支持将它连接到您的模型。

+0

是的,这是我需要的,谢谢。但你可以帮我与未捕获的错误:没有select2/compat/inputData? Google说我需要使用完整版本的select2,但是来自bower的select2 4.0.3不包含完整版本。 – Evgeniy175

+0

答案:使用''。再次感谢您:) – Evgeniy175

+0

不客气,我对select2自己没有太多的经验,所以无法帮助你:) –