EditorFor 扩展不适用于 Asp.Net MVC 5.1 中的 htmlAttributes
EditorFor extension not working for htmlAttributes in Asp.Net MVC 5.1
我有以下代码:
public static class HtmlExtendedHelpers
{
public static IHtmlString eSecretaryEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel,TProperty>> ex, object htmlAttributes, bool disabled )
{
if (disabled)
{
htmlAttributes.Add(new { @disabled = "disabled" }); //searching for working code as replacement for this line
}
return htmlHelper.EditorFor(ex, htmlAttributes);
}
}
它在 disabled = false 时有效,而当我 disabled 为 true 时,我的所有替代方案都失败了。然后 none 的 htmlAttributes 被写入。
变量 htmlAttribute 具有 VALUE(包括 htmlAttributes 属性 :)
htmlAttributes: { class = "form-control" }
这是因为我有一个默认的 class 表单控件,我想添加一个属性:禁用,值禁用。
有谁知道如何正确实现这个?
PS。自 Asp.Net MVC 5.1 起,支持 htmlAttributes
您可以像下面这样在 htmlAttributes 中传递属性:
htmlAttributes: { class = "form-control", disbaled="disabled" }
您还可以创建您的元数据属性,该属性可以装饰在您使用 EditorFor 的 属性 上。
要创建自己的元数据 属性,您可以实现 IMetadataAware
接口。
您可以使用HtmlHelper.AnonymousObjectToHtmlAttributes
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (disabled)
{
attributes.Add("disabled", "disabled");
}
或者,您可以将 disabled
属性作为 htmlAttributes
对象的一部分传递,这意味着您根本不需要 if
语句。
htmlAttributes: { class = "form-control", disabled = "disabled" }
根据您是否有自定义 EditorFor
模板,您可能需要更改将 html 属性传递给 EditorFor
函数的方式,作为它接受的参数- additionalViewData
不一样。
This article解释更详细。
如果您使用的是默认模板,您可以在另一个匿名对象中传递 html 属性:
return htmlHelper.EditorFor(ex, new { htmlAttributes = attributes });
如果您有自定义模板,则需要检索 html 属性并在视图中自行应用它们:
@{
var htmlAttributes = ViewData["htmlAttributes"] ?? new { };
}
我有以下代码:
public static class HtmlExtendedHelpers
{
public static IHtmlString eSecretaryEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel,TProperty>> ex, object htmlAttributes, bool disabled )
{
if (disabled)
{
htmlAttributes.Add(new { @disabled = "disabled" }); //searching for working code as replacement for this line
}
return htmlHelper.EditorFor(ex, htmlAttributes);
}
}
它在 disabled = false 时有效,而当我 disabled 为 true 时,我的所有替代方案都失败了。然后 none 的 htmlAttributes 被写入。
变量 htmlAttribute 具有 VALUE(包括 htmlAttributes 属性 :)
htmlAttributes: { class = "form-control" }
这是因为我有一个默认的 class 表单控件,我想添加一个属性:禁用,值禁用。
有谁知道如何正确实现这个?
PS。自 Asp.Net MVC 5.1 起,支持 htmlAttributes
您可以像下面这样在 htmlAttributes 中传递属性:
htmlAttributes: { class = "form-control", disbaled="disabled" }
您还可以创建您的元数据属性,该属性可以装饰在您使用 EditorFor 的 属性 上。
要创建自己的元数据 属性,您可以实现 IMetadataAware
接口。
您可以使用HtmlHelper.AnonymousObjectToHtmlAttributes
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (disabled)
{
attributes.Add("disabled", "disabled");
}
或者,您可以将 disabled
属性作为 htmlAttributes
对象的一部分传递,这意味着您根本不需要 if
语句。
htmlAttributes: { class = "form-control", disabled = "disabled" }
根据您是否有自定义 EditorFor
模板,您可能需要更改将 html 属性传递给 EditorFor
函数的方式,作为它接受的参数- additionalViewData
不一样。
This article解释更详细。
如果您使用的是默认模板,您可以在另一个匿名对象中传递 html 属性:
return htmlHelper.EditorFor(ex, new { htmlAttributes = attributes });
如果您有自定义模板,则需要检索 html 属性并在视图中自行应用它们:
@{
var htmlAttributes = ViewData["htmlAttributes"] ?? new { };
}