c# - ASP.NET Core 2 MVC 选择标记帮助程序(下拉) 所选项目并不总是反映值
问题描述
我正在处理一个表单来操作我的应用程序中的用户/员工数据。
我有一个简单的下拉选择标签助手(后跟标签以输出当前值)来更改员工的区域销售经理分配:
<select asp-for="Employee.RegionalSalesManager" asp-items="Model.RegionalSalesManagers" disabled="@(Model.EmployeeRole == 1 ? null : "disabled")">
<option value="0">Select...</option>
</select>
<label id="lblRegionalSalesManagerID">@((Model.Employee != null) ? Model.Employee.RegionalSalesManager.ToString() : @"")</label>
这在最初Model.Empolyee
从数据库加载时工作正常;在视图中,选择标签(下拉菜单)显示正确的项目(区域销售经理)并在标签中输出匹配值:
良好的下拉菜单
表单的另一部分允许更改员工的角色 - 基于角色,区域销售经理分配可能不是必需的。更改员工角色时,表单发布,如果不需要分配区域销售经理,则该Model.Employee.RegionalSalesManger
值为零:
[HttpPost, ValidateAntiForgeryToken]
public async Task<IActionResult> Index(UserManagementViewModel model)
{
if (model.Employee != null)
{
switch (model.EmployeeRole)
{
case 2: // employee Role is Regional Sales Manager
model.Employee.RegionalSalesManager = 0; // no need for assignment
break;
}
}
return View(await BuildModel(model));
}
在视图刷新时,选择标签助手中的逻辑disabled="@(Model.EmployeeRole == 1 ? null : "disabled")
会启动并适当地禁用菜单,并且标签显示该值确实已成功归零;但是,当我的期望是它会显示项目“选择...”时,菜单仍然显示最后一个选择,因为这是与零值对应的项目:
意外的下拉菜单
再次回发(通过将角色更改为另一个不需要区域销售经理分配的角色)最终会将菜单项设置为“选择...”
我在这里想念什么?视图模型在第一次回发后以预期值返回;为什么菜单选择没有更新?
解决方案
我想到了。选择标签助手的发布值,当提交表单时,“覆盖”(读取“设置”)模型上的值。您不能更新 POST 控制器中的模型值并期望选择标签助手使用新值。
推荐阅读
- node.js - API Gateway 不将标头传递给 Lambda
- email - Exim 路由器配置失败
- ios - 将源添加到混音器时出现“抛出 -10878”
- python - 通过 Python 中的环境变量访问 API 的问题
- node.js - 动视网站的 Node.js 发布登录请求卡住了
- php - 如何使用 mpdf 库设置整页 pdf?
- c# - 在EOF c#Xabe.FFmpeg之后无法确定输入流0:0的格式
- python - 在 python 中合并两个 XML 后的漂亮打印
- java - Netbeans:在 Maven 项目加载期间允许外部构建参与者(Maven Tiles)
- button - 基于输入字段的条件按钮链接(邮政编码)