在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属性。

有人对此有任何线索吗?

在Html EditorFor()中添加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属性只是与新的默认属性连接。