C#中如何通过属性禁用模型属性?Email字段禁用失效问题
如何禁用Email字段?[Editable(false)]与[ReadOnly(true)]属性均无效
我尝试用[Editable(false)]和[ReadOnly(true)]标记Email字段,想让它处于禁用状态,但这两个属性都没有效果。
对应的模型代码如下:
[NopResourceDisplayName("Admin.Address.Fields.Email")] [AllowHtml] //[Editable(false)] public string Email { get; set; }
(注:附代码截图、UI结果截图)
解决方法
从代码里的NopResourceDisplayName可以看出这是NopCommerce项目,这类项目里表单字段的禁用逻辑更多是在视图层控制,而非仅依赖模型属性,具体操作如下:
- 定位对应视图文件:找到Admin区域下地址相关的视图(比如
~/Areas/Admin/Views/Address/Edit.cshtml或创建视图)。 - 修改字段渲染代码:
- 如果用NopCommerce自带的
Html.NopEditorFor扩展,添加禁用属性:@Html.NopEditorFor(model => model.Email, new { htmlAttributes = new { @disabled = "disabled" } }) - 如果是普通
EditorFor,同样添加禁用参数:@Html.EditorFor(model => model.Email, new { htmlAttributes = new { @disabled = "disabled" } })
- 如果用NopCommerce自带的
- 后端防护:前端禁用后仍可能被恶意篡改请求,所以要在后端保存逻辑里忽略该字段的更新,或者保留原有值。
如果想通过模型属性统一控制,也可以自定义模型元数据提供器,或者用NopCommerce的自定义标记属性,在视图中根据属性判断是否添加禁用属性。
内容的提问来源于stack exchange,提问作者Lilit Qocharyan
相关产品推荐
相关产品推荐

