2017-08-11 55 views
0

我是一個初學者和學習ASP.Net MVC 5,並有很多與我的問題相關的堆棧溢出的答案,但我找不到我在找什麼。如何創建HtmlDropdownListfor在asp.net mvc 5中不使用modelviews在一對多關係

所以,我有兩個模型。 Car and Company一輛車可以屬於 給一家公司,一家公司可以有多輛車。 現在我有一個名爲「車輛登記表格」的表格,其中用戶將看到一個textbox放置汽車名稱和一個dropdown list to select company name

問題:我可以創建一個視圖模型,並顯示公司列表的下拉列表。但我只想知道如果我不允許使用視圖模型,那麼在這種情況下是否可以在Car Entry Form中顯示下拉列表。 在我上面描述的場景中,使用viewmodel是強制性的還是可以選擇的。我可以只使用汽車模型,並以某種方式整合公司的下拉列表嗎?我有道理嗎?

視圖模型解決方案

汽車模型

public class Car 
{ 
    public int Id { get; set; } 
    public string CarName { get; set; } 
    public int CompanyId { get; set; } 
    public virtual Company Company { get; set; } 
} 

公司型號

public class Company 
{ 
    public int Id { get; set; } 
    public string CompanyName { get; set; } 
    public ICollection<Website> Car { get; set; } 
} 

視圖模型

public class CarViewModel 
{ 
    public int Id { get; set; } 
    public IEnumerable<Company> Companies { get; set; } 
    public int CompanyId { get; set; } 
    public string CarName { get; set; } 
} 

控制器動作

public ActionResult Create() 
{ 
    var viewModel = new CarViewModel 
    { 
     Companies = _context.Companies.ToList() 
    }; 
    return View(viewModel); 
} 

流暢API

modelBuilder.Entity<Company>() 
       .HasMany<Car>(w => w.Cars) 
       .WithRequired(w => w.Company) 
       .HasForeignKey(w => w.CompanyId) 
       .WillCascadeOnDelete(false); 

查看文件

@model WebApplication3.Models.CarFormViewModel 
     <div class="form-group"> 
    <div class="col-md-10"> 
    @Html.DropDownListFor(m => m.CompanyId, new SelectList(Model.Companies, "Id", "Name", Model.Companies), new { @class = "form-control"}) 
    </div> 
</div> 
+0

'我不允許使用viewmodel'這是一個學校作業嗎?否則,與使用ViewBag等動態對象相比,使用ViewModel可能會非常清晰且易於維護。 – Win

+0

爲什麼在世界上你不會被允許使用視圖模型?作爲一個方面說明,刪除'SelectList'構造函數中的第四個參數(它什麼也不做) - 它只是'新的SelectList(Model.Companies,「Id」,「Name」)',但是你的屬性真的應該是'IEnumerable Companies(不是'IEnumerable Companies') –

+0

@StephenMuecke:我想如果我想在下拉列表中默認顯示第一個下拉選項,那麼我需要第四個參數。我將把這個屬性改爲'IEnummerable '。感謝您指出。 – Unbreakable

回答

0

是的,這是可能的。

我經常使用的方法是這樣的:

你的行動應該是這樣的:

public ActionResult Create() 
{ 
    ViewBag.Companies = _context.Companies.ToList(); 
    return View(); 
} 

,這裏是你的看法:

@model WebApplication3.Models.Car 
    <div class="form-group"> 
<div class="col-md-10"> 
@Html.DropDownListFor(m => m.CompanyId, new SelectList(ViewBag.Companies as List<WebApplication3.Models.Company>, "Id", "Name", Model.Companies), new { @class = "form-control"}) 
</div> 

ViewBag被動態對象,它用於傳遞對象形式cont滾到視圖。

可以找到更多關於ViewBag here

而且我相信當你創建一個視圖編輯Car型號的視圖模型應該是CarCompanyList不是汽車的一部分,它的東西,只是幫助用戶編輯的汽車。您知道,您只需要一個用於編輯或創建Car的CompanyId,因此最好不要將它用作ViewModel的一部分。但是,請放心,並找到您的最佳做法和方法。沒有規則來分隔你想要傳遞的對象。

相關問題