我有以下代码:

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时,我所有的替代方法都失败。然后,没有任何htmlAttribute被编写。

变量htmlAttribute具有VALUE(包括htmlAttributes属性:)

htmlAttributes: { class = "form-control" }


这是因为我有一个默认的表单控件类,并且我想添加一个属性:禁用,禁用值。

有人知道如何正确实现吗?

PS。从Asp.Net MVC 5.1开始,对htmlAttributes的支持

最佳答案

您可以使用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 { };
}

关于asp.net - EditorFor扩展不适用于Asp.Net MVC 5.1中的htmlAttributes,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37616294/

10-09 13:05