html - 在 Razor 页面中添加动态 html 属性会中断自动绑定
问题描述
我有一个绑定到模型属性的输入字段,该属性必须是只读的,具体取决于登录用户是否是管理员。因此,对于管理员来说,输入应该是这样的:
<input asp-for="OrderHeader.PhoneNumber" type="text" class="form-control" />
或者对于非管理员来说:
<input readonly asp-for="OrderHeader.PhoneNumber" type="text" class="form-control" />
我已经尝试使用@Html.Raw() 以下答案: Razor 中的动态 Html 属性格式
@{
var readonlyAttr = "readonly";
if (/*some logic here to determine if user is admin*/)
{
readonlyAttr = "";
}
}
<input @Html.Raw(readonlyAttr) asp-for="OrderHeader.PhoneNumber" type="text" class="form-control" />
它似乎可以工作,因为渲染的输入元素是期望的结果。但是当我填写该字段并提交表单时,OrderHeader.PhoneNumber 为空!我也在其他地方看到了这个建议:
<input @readonlyAttr asp-for="OrderHeader.PhoneNumber" type="text" class="form-control" />
但同样的问题发生了——就像自动发布值绑定被破坏了。没有此动态属性的其余字段传递正常,但此字段始终为空。
最后,我发现这是唯一有效的方法:
<input {@readonlyAttr} asp-for="OrderHeader.PhoneNumber" type="text" class="form-control" />
但我不知道为什么。有人可以向我解释吗?谢谢!
解决方案
推荐阅读
- python - 使用 Python 搜索文件的行
- windows - MSBUILD 未检测到项目文件中的更改
- php - 两个标点之间单词的正则表达式
- sql-server - sql导入导出向导在上传期间删除数据
- php - 如何通过 ioncube 对 Laravel 刀片文件进行编码/加密
- reactjs - 创建 React App - 路由更改图像路径
- python - 如何在 Plotly 中启用和禁用对数刻度作为查看器?
- php - 当我单击注销按钮时,它不会将我重定向到登录页面,而是将 login.php 添加到已经存在的 url
- angularjs - 如何在html中使用angularJs显示api数据
- spring - oAuth2 使用 JWT 或类似方法的无状态 Web 服务的 Spring Security 工作流程?