在Html EditorFor()中添加Html属性
本文关键字:Html 添加 属性 EditorFor | 更新日期: 2023-09-27 18:18:48
这是一个棘手的问题,因为我想添加Html属性到EditorFor(),但不想取代那些已经创建。让我解释一下:
我有一个默认的编辑器模板字符串。CSHTML,代码如下:
@{
var htmlAttributes = ViewData;
htmlAttributes["class"] = "text-box single-line form-control";
htmlAttributes["placeholder"] = ViewData.ModelMetadata.Watermark ?? ViewData.ModelMetadata.DisplayName;
htmlAttributes["title"] = ViewData.ModelMetadata.Watermark ?? ViewData.ModelMetadata.DisplayName;
}
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttributes)
它总是用于添加以下类,占位符和标题,基于DisplayName DataAnnotation,对于表单输入,这是非常方便的!
但问题是,我有麻烦添加禁用属性为一个特定的表单输入与公共代码:
@Html.EditorFor(x => x.Field, new { htmlAttributes = new { disabled = "" } })
当表单输入的字段不是字符串时,它将不遵循创建的EditorTemplate,它将与这个代码一起工作,但是当它是字符串时,EditorTemplate将替换Html属性。
有人对此有任何线索吗?
原来有几个愚蠢的错误,首先,EditorFor()字段上的声明是错误的,正确的是:
@Html.EditorFor(x => x.Field, new { @disabled = "" })
第二点是继续在字符串中使用传入的htmlatattributes。cshtml EditorTemplate,替换类属性定义:
htmlAttributes["class"] = "text-box single-line form-control";
为:htmlAttributes["class"] = htmlAttributes["class"] + "text-box single-line form-control";
通过这种方式,传入的html属性只是与新的默认属性连接。