当我将模型发送回控制器时,模型实例返回时所有属性均为空。
public class ManageUserRolesViewModel
{
public PSUser PSUser { get; set; }
public SelectList Roles { get; set; }
public string SelectedRole { get; set; }
}
<table id="style-3" class="table style-3 table-hover" style="width:100%">
<thead>
<tr>
<th>Name</th>
<th>Current Role</th>
<th>New Role</th>
<th>Manage Role</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.PSUser.FullName</td>
<td>@(await RolesService.GetUserMainRoleAsync(item.PSUser))</td>
<td>
<form asp-action="ManageUserRoles" asp-controller="UserRoles" method="post">
<input type="hidden" asp-for="@item.PSUser" />
<div class="flex flex-wrap gap-2 items-center">
<select asp-for="@item.SelectedRole" asp-items="@item.Roles" ></select>
</div>
<input type="submit" class="btn btn-primary" value="Assign Role">
</form>
</td>
<td>
</td>
</tr>
}
</tbody>
</table>
public async Task<IActionResult> ManageUserRoles(ManageUserRolesViewModel model)
{
//do stuff with model
}
我尝试过将表单标签放在标签之前和之后,还更改了 SelectList 结构,更改了 ViewModel 实例名称,删除了 View 代码并重新创建了它,并阅读了无数关于 ViewModel 绑定的 Stack Overflow 帖子。
我在这里做错了什么?任何帮助将不胜感激!
选择的 name 属性将呈现为 item.SelectedRole:
你可以修改
public async Task<IActionResult> ManageUserRoles(ManageUserRolesViewModel model)
{
//do stuff with model
}
到
public async Task<IActionResult> ManageUserRoles(ManageUserRolesViewModel item)
{
//do stuff with model
}
此外,您想要在 post 方法中接收的 PUser 的每个属性都必须渲染、修改
<input type="hidden" asp-for="@item.PSUser" />
到
<input type="hidden" asp-for="@item.PSUser.Id" />
<input type="hidden" asp-for="@item.PSUser.Name" />
......
现在它在我这边起作用了:
您可以查看此文档了解更多详情