繁体   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