【问题标题】:Using DropDown Menu Selection使用下拉菜单选择
【发布时间】:2021-08-23 07:34:48
【问题描述】:

我是 MVC Core 的新手,我想做一个使用 ViewModel 来自数据库的下拉列表的示例。

我的例子是:

表 ( Car ):带有 CarId、CarName、CarBrand。 [FK(ColorId), FK(UserID)] 表格(颜色):带 ColorId ,颜色

 public class Car
{
    [Key]
    public int CarId { get; set; }
    [Required]
    public string CarBrand { get; set; }
    [Required]
    public string CarName { get; set; }


    //--------Foreign[ColorID]--------Foreign[UserId]--------------------------------
    // Foreign key to customer
    public virtual Color Color { get; set; }    // Dropdown List 

    public ApplicationUser ApplicationUser { get; set; }   // Logged in UserId

}

    public class Color
{
    [Key]
    public int ColorId { get; set; }
    [Required]
    public string ColorName { get; set; }
}

在数据库中保存几种颜色:1=红色,2=黄色,3=绿色

这是我的观点

@model DropDownListOtherModel.Models.Car
<div ">
    <div class="form">
        <form class="Car-form" method="Post" asp-controller="Car" asp-action="Save">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                @*<label asp-for="FullName"></label>*@
                <input asp-for="CarBrand" placeholder=" Car Brand" />
                <span asp-validation-for="CarBrand" class="text-danger"></span>
            </div>

            <div class="form-group">
                @*<label asp-for="FullName"></label>*@
                <input asp-for="CarName" placeholder=" Car Name" />
                <span asp-validation-for="CarName" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label for="cars">Choose a Color:</label>
                <br />
                <select name="cars" id="cars" asp-for="Color">
                    <option value="1">RED</option>
                    <option value="2">YELLOW</option>
                    <option value="3">GREEN</option>
                    <option value="4">BLACK</option>
                    <option value="5">WHITE</option>
                </select>
            </div>

            <button class="btn btn-success" type="submit">submist</button>

        </form>
    </div>
</div>

在我的视图中,我应该显示带有 2 个输入 CarName、CarBrand 和 3 个下拉颜色的表单,当我保存时,它应该与表单一起附加。

首先我应该如何在选择列表中显示颜色, 其次,我应该更新 Save 方法,以包含 colorID 吗?

【问题讨论】:

  • 还有什么可以帮助您的吗?

标签: c# asp.net-core asp.net-core-mvc


【解决方案1】:

你可以试试这个方法,

型号:

  public class CarColorViewModel
    {
        
        public String CarName { get; set; }
        public List<Color> colors { get; set; }
    }

控制器:

 public IActionResult LoadDropDownFromDatabase()
        {
         // Get your database value here, then bind to list I am  binding here a seed value.
            var color = new List<Color>()
            {
                new Color(){ ColorName = "Select Color",ColorId =1},
                new Color(){ ColorName = "Red",ColorId =2},
                new Color(){ ColorName = "Blue",ColorId =3},
                new Color(){ ColorName = "Green",ColorId =4}

            };
            var model = new CarColorViewModel();
            model.colors = color;


            return View(model);
        }

查看:

@model CarColorViewModel

@{ ViewBag.Title = " "; }

<h2>Load DropDown From Backend</h2>

@using (Html.BeginForm("LoadDropDownFromDatabase", "StackOverFlow"))
{
   
  
    <table class="table table-sm table-bordered table-striped">
        <tr><th>Car Name </th><td > @Html.TextBoxFor(r => Model.CarName, new { @class = "form-control" })</td></tr>
        <tr><th>Select Color</th><td> @Html.DropDownListFor(m => m.colors, new SelectList(Model.colors, "ColorId", "ColorName"), new { @class = "form-control" })</tr>
    </table>
  
   
    <input id="Button" type="submit" value="Submit" />

}

输出:

希望这能帮助您实现目标。

【讨论】:

  • 感谢您的尝试.. 但我不断收到空引用错误
  • 你能在它得到空引用错误的地方调试它吗?首先,只需复制并粘贴我的解决方案,然后运行,然后您就可以进行修改。如果你只是复制和粘贴它肯定应该工作。让我知道更新。
  • 我调试过,肯定我已经更改了必要的更改,但它一直抛出空引用,我现在正在处理它,我会更新你
  • 玩过之后,我从数据库中带了颜色,然后添加到列表中,然后显示出来,对不起,我花了一点时间,但我还是新手。跨度>
  • 不用担心,遇到任何问题随时分享。
【解决方案2】:

将 ColorId 添加到 Car 类

 public class Car
{
    [Key]
    public int CarId { get; set; }
    [Required]
    public string CarBrand { get; set; }
    [Required]
    public string CarName { get; set; }

    public int ColorId { get; set; }  
   [ForeignKey(nameof(ColorId))]
    [InverseProperty("Cars")]
    public virtual Color Color { get; set; }    

    public ApplicationUser ApplicationUser { get; set; }   // Logged in UserId

}

  public class Color
{
    [Key]
    public int ColorId { get; set; }
    [Required]
    public string ColorName { get; set; }

  [InverseProperty(nameof(Car.Color))]
   public virtual ICollection<Car> Cars{ get; set; }    

}

从选择中删除 id 和 name

<select  asp-for="ColorId">
 <option value="0">Select Color</option>
 <option value="1">RED</option>
  <option value="2">YELLOW</option>
   <option value="3">GREEN</option>
    <option value="4">BLACK</option>
   <option value="5">WHITE</option>
</select>

动作

[HttpPost]
public ActionResult Create(Car car)
{
....your code
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多