簡體   English   中英

如何在ASP.NET MVC 5中創建HtmlDropdownListfor而不使用一對多關系中的模型視圖

[英]How to create HtmlDropdownListfor in asp.net mvc 5 without use of modelviews in one to many relationship

我是一個初學者,正在學習ASP.Net MVC 5,並且與我的問題相關的堆棧溢出有很多答案,但我找不到我想要的東西。

所以,我有兩個模型。 Car and Company 一輛車可以屬於一個公司,一個公司可以有許多車 現在,我有一個名為“ Car Entry Form ”的表格 ,用戶將在其中看到一個textbox以輸入汽車名稱,並在dropdown list to select company name

問題:我能夠創建視圖模型並顯示帶有公司列表下拉列表的表單。 但是我只想知道是否允許我使用viewmodel ,在這種情況下,可以在Car Entry Form中顯示下拉列表。 在我上面提到的場景中,使用viewmodel是強制性的還是優先的 我可以只使用汽車模型,並以某種方式合並公司的下拉列表嗎? 我說得通嗎

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>

對的,這是可能的。

我經常使用這樣的方法:

您的操作應如下所示:

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是動態對象,用於將對象從控制器傳遞到視圖。

在這里可以找到有關ViewBag的更多信息。

我相信當您創建視圖來編輯Car Model時,其ViewModel應該是CarCompanyList不是Car的一部分,它只是幫助用戶編輯car。 您知道,您只需要一個CompanyId即可編輯或創建Car,因此最好不要將其用作ViewModel的一部分。 但是,請放心,找到您的最佳做法和方法。 對於要傳遞給視圖的對象如何分隔沒有任何規則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM