首页 > 解决方案 > 在 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" />

但我不知道为什么。有人可以向我解释吗?谢谢!

标签: htmlrazordynamicattributesreadonly

解决方案


推荐阅读