2016-10-30 99 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自己沒有太多的經驗,所以無法幫助你:) –