ASP.NET MVC 从选择列表传递值

ASP.NET MVC passing value from selectlist

我有一个 .NET Core 2 MVC 项目,我对此很陌生。我有一个详细信息视图,其中包含 selected 用户的数据。我正在使用 ViewModel 来显示 selected 用户的数据,一切正常。我最终想要做的是允许将一个用户的身份角色克隆到当前 selected 用户。因此,我在我的视图中有一个包含 SelectList 的面板,您可以在其中 select 一些其他用户(我称他们为源用户)来获取他们当前分配的身份角色。然后我想要一个显示 "Clone" 的按钮,然后单击删除当前用户的所有角色,然后将它们添加到 selected 源用户分配给的角色中。

这是我用于下拉列表的内容:

查看:

<select asp-for="EmployeeList" class="form-control"
    asp-items="@Model.EmployeeList"                                 
    onchange="this.form.submit()">
    <option disabled selected>-</option>
</select>

控制器:

var employeeList = _employeeRepository.GetEmployeeList().Select(e => new
{
    Id = e.EmployeeId,
    Value = e.PreferredFirstName != null ? e.LastName + ", " + e.PreferredFirstName : e.LastName + ", " + e.FirstName                            
});

视图模型:

public SelectList EmployeeList { get; set; }

在我看来,我有一个 post:

的表格
@using (Html.BeginForm("Details", "ApplicationUser", FormMethod.Post))

所以我需要将源用户下拉列表的 selected id(字符串)传递给控制器​​中的 [HttpPost] 详细信息操作。我还想在视图的下拉列表中保留 selected 选项。我还想维护显示在我的 ViewModel 中的所有数据。

非常感谢您的帮助。

如前所述,您的观点确实没有道理。但是我们可以解决这个问题。

视图模型:

public List<SelectListItem> EmployeeList { get; set; }

查看:

<select id="employee-select" asp-for="EmployeeId" class="form-control" onchange="postEmployee()" asp-items="@Model.EmployeeList">
    <option disabled selected>-</option>
</select>

<script>
    function postEmployee() {
        var id = $('#employee-select').val();
        if (id !== '' && id != null) {
            var url = '../CONTROLLERNAME/UpdateUser/' + id;
            var settings = {
                "url": url,
                "method": 'POST'
            };
            $.ajax(settings);
        }
    }
</script>

控制器:

[HttpPost("UpdateUser/{id}")]
public IActionResult UpdateUser([FromRoute] int id)
{
    // Do things with id
}