Html.DropDownList 未在 GET 上设置所选项目

问题描述 投票:0回答:2

我遇到这个问题是我正在设置包含所选项目的选择列表。 在 GET 请求中,选择列表已填充,但所选项目未设置。 在 POST 请求时,选择列表将填充新的选定值。

两个 ActionResult 函数的代码与视图相同(都使用相同的视图)。

这是我的学生课程的一部分

public IEnumerable<SelectListItem> Titles { get; set; }

这是我控制器中的代码:

public ActionResult Index()
{
    Student student = _dB.Students.Where(std => std.AccountID == accountID).FirstOrDefault();

    student.Titles = new SelectList(_dB.Titles, "Id", "Description", student.Title);

    return View(student);
}


    [HttpPost]
    public ActionResult Index(Student student)
    {

        if (ModelState.IsValid)
            {
                Student studentSave = _dB.Students.Where(stud => stud.StudentID == student.StudentID).FirstOrDefault();
                studentSave.Name = student.Name;
                studentSave.Surname = student.Surname;
                studentSave.Email = student.Email;
                studentSave.Title = student.Title;
                studentSave.DOB = student.DOB;
                studentSave.Telnum = student.Telnum;
                studentSave.AddressLine1 = student.AddressLine1;
                studentSave.AddressLine2 = student.AddressLine2;
                studentSave.Town = student.Town;
                studentSave.PostCode = student.PostCode;
                studentSave.Country = student.Country;

                _dB.SaveChanges();
                
            }

            ViewBag.Submitted = true;

            student.Titles = new SelectList(_dB.Titles, "Id", "Description", student.Title);

            return View(student);

    }

这是我视图中的代码

@Html.DropDownList("Title", Model.Titles, new { @class = "form-control shadow-none" })
                                    @Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })

调试到

Html.DropDownList
时,值会正确传递,但在渲染时未设置所选项目(执行 GET 请求时)。

我尝试了各种填充选择列表的方法,所有方法都呈现了相同的结果。

有人经历过类似的事情吗?

c# asp.net-mvc html.dropdownlistfor
2个回答
0
投票

您需要为

Title
 的第四个参数提供 
DropDownList(String, String, IEnumerable<SelectListItem>, Object, Object)
值。

@Html.DropDownList("Title", 
    "",
    Model.Titles, 
    Model.Title,
    new { @class = "form-control shadow-none" })

或者,您可以使用

Html.DropDownListFor
Title
值绑定到下拉列表。

@Html.DropDownListFor(model => model.Title, 
    Model.Titles, 
    new { @class = "form-control shadow-none" })

0
投票

我认为错误来自于您对 selectList 的初始化,您将数据值指定为“Id”,但随后您说所选值是整个对象

student.Title
您应该尝试这个
new SelectList(_dB.Titles, "Id", "Description", student.Title.Id)

© www.soinside.com 2019 - 2024. All rights reserved.