【问题标题】:How can I make a DropDownList in my edit view show the database value already stored?如何在我的编辑视图中使 DropDownList 显示已存储的数据库值?
【发布时间】:2012-11-28 22:05:50
【问题描述】:

我有一个有效的 MVC 4 编辑视图,可以编辑存储的数据库记录。这是控制器的相关部分:

    //
    // GET: /Occurrence/Edit/5

public ActionResult Edit(int id = 0)
    {
        Occurrence occurrence = db.Occurrences.Find(id);
        if (occurrence == null)
        {
            return HttpNotFound();
        }

        List<SelectListItem> points = new List<SelectListItem>()
        { 
            new SelectListItem() { Text = "0 - (No Points)", Value = "0"},
            new SelectListItem() { Text = "1 - (5 to 14 minutes)", Value = "1"},
            new SelectListItem() { Text = "2 - (15 minutes to 1 hour)", Value = "2"},
            new SelectListItem() { Text = "3 - (1 to 3 hours)", Value = "3"},
            new SelectListItem() { Text = "5 - (Over 3 hours)", Value = "5"},
        };

        ViewBag.Points = points;

        ViewBag.EmployeeID = new SelectList(db.Employees, "EmployeeID", "EmployeeName", occurrence.EmployeeID);
        return View(occurrence);
}

这是模型的点部分:

[Required(ErrorMessage = "The Points field is required.")]
public int Points { get; set; }

这是编辑视图的相关部分:

    <div class="editor-field">
        @Html.DropDownList("Points")
        @Html.ValidationMessageFor(model => model.Points)
    </div>

当我尝试编辑记录时,无论数据库中存储什么值,点下拉列表始终填充“0 -(无点)”。有没有办法绑定这个下拉列表,以便在编辑视图中显示存储的值?

【问题讨论】:

    标签: asp.net razor asp.net-mvc-4


    【解决方案1】:

    您需要使用 DropDownListFor 将字段连接到您的属性。您应该将模型上的选项传递给视图。您需要编写一个视图模型并传递出现次数和选项。然后使用 DropDownListFor

    public class ViewModel {
    
        public List<SelectListItem> PointOptions { get; set; }
    
        [Required(ErrorMessage = "The Points field is required.")]
        public int Points { get; set; }
    }
    

    在您的控制器中填充这些内容并将其传递下来,而不是使用 ViewBag,然后使用 DropDownListFor:

    @Html.DropDownListFor(m => m.Points, Model.PointOptions)
    

    *For 方法会将所有相关的“goo”连接到您的 html 中。它确保了自动填充的值以及下一篇文章的正确绑定。

    祝你好运。

    【讨论】:

    • 当你说要创建一个视图模型时,那是不是我已经拥有的模型的单独文件? (这是我的第一个 MVC 项目,所以我希望这个问题有意义)。
    • 是的,它不必是一个物理上的单独文件,只是一个不同的类。发送“视图模型”的想法意味着您只是将许多逻辑包装到视图可以轻松使用的“助手类”中。它还很好地封装了所有内容,因为您不依赖 viewbag 中的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2010-09-22
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多