在 ASP.Net Core 中提交帖子表单后,前端下拉列表中选择的值不会传递到视图模型的属性

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

大家。我希望得到你的帮助。 我无法从前端的下拉列表中获取数据。我在视图模型的此属性中始终为 null。

控制器:

public IActionResult Add()
{
    var projectDropdown = _projectsService.GetProjectDropdowns();
    ViewBag.Users = new SelectList(projectDropdown.Users, "Id", "Fullname");

    return View();
}

[HttpPost]
public IActionResult Add(ProjectViewModel projectVM)
{
    var projectDropdown = _projectsService.GetProjectDropdowns();
    ViewBag.Users = new SelectList(projectDropdown.Users, "Id", "Fullname");

    _projectsService.AddProject(projectVM);

    return RedirectToAction(nameof(Index));
}

视图模型:

public class ProjectViewModel
{
    public required string Name { get; set; }

    public string? Description { get; set; }

    public required ProjectStatus Status { get; set; }

    public User? ProjectAdmin { get; set; }

    public List<User>? Users { get; set; }
}

查看:

<div class="form-group">
    <label asp-for="ProjectAdmin" class="control-label"></label>
    <select asp-for="ProjectAdmin" class="form-control" asp-items="ViewBag.Users"></select>
    <span asp-validation-for="ProjectAdmin" class="text-danger"></span>
</div>

<div class="form-group">
    <label asp-for="Users" class="control-label"></label>
    <select asp-for="Users" class="form-control" multiple asp-items="ViewBag.Users"></select>
    <span asp-validation-for="Users" class="text-danger"></span>
</div>

我也尝试过使用这个变体,但它也不起作用。

<div class="form-group">
    <label asp-for="ProjectAdmin" class="control-label"></label>
    @Html.DropDownListFor(n => n.ProjectAdmin, (SelectList)ViewBag.Users, htmlAttributes: new { @class = "form-control" })
    <span asp-validation-for="ProjectAdmin" class="text-danger"></span>
</div>

我不知道为什么会发生这种情况,调试没有帮助。

c# asp.net-core-mvc dropdown
1个回答
0
投票

当使用

@Html.DropDownListFor()
帮助器时,就像在您的文章中一样,第一个参数应该是一个表达式,用于标识包含要显示的属性的对象,并且它应该是一个简单类型:例如,
string
int

因此,将

ProjectAdmin
定义为

public string ProjectAdmin { get; set; }

然后像下面这样使用它:

<div class="form-group">
    <label asp-for="ProjectAdmin" class="control-label"></label>
    @Html.DropDownListFor(n => n.ProjectAdmin, (SelectList)ViewBag.Users, htmlAttributes: new { @class = "form-control" })
    <span asp-validation-for="ProjectAdmin" class="text-danger"></span>
</div>

将数据模型传递到视图时,将

ProjectAdmin
属性设置为默认显示为选定的值。将表单提交到控制器时,此属性将包含新选定的值。

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