Asp.net 如何在剑道日期选择器的扩展中添加额外的HtmLatAttributes

Asp.net 如何在剑道日期选择器的扩展中添加额外的HtmLatAttributes,asp.net,asp.net-mvc,razor,html-helper,kendo-asp.net-mvc,Asp.net,Asp.net Mvc,Razor,Html Helper,Kendo Asp.net Mvc,我试图在kendo的日期时间选择器的扩展方法中添加html属性 public static DatePickerBuilder Readonly(this DatePickerBuilder builder, bool isReadOnly) { if (isReadOnly) { var dic = new Dictionary<string, object>(); dic.Add("r

我试图在kendo的日期时间选择器的扩展方法中添加html属性

    public static DatePickerBuilder Readonly(this DatePickerBuilder builder, bool isReadOnly)
    {
        if (isReadOnly)
        {
            var dic = new Dictionary<string, object>();
            dic.Add("readonly", "readonly");
            builder.HtmlAttributes(dic);
        }

        return builder;
    }
但是,我必须确保在razor中调用
readonly()
扩展方法作为链中的最后一个方法

代码吹不起作用

@(Html.Kendo().DatePickerFor(x => x.Deadline)
              .Format("MM/dd/yyyy")                            
              .Readonly(Model.IsEnabled)
              .HtmlAttributes(new { data_inherit_value = Model.InheritDeadline }))
我认为这是剑道日期选择器控制的问题。它会覆盖现有的htmlattributes

如果我改变了顺序,并在最后使用readonly,那么代码吹就行了

@(Html.Kendo().DatePickerFor(x => x.Deadline)
              .Format("MM/dd/yyyy")                  
              .HtmlAttributes(new { data_inherit_value = Model.InheritDeadline })
              .Readonly(Model.IsEnabled))

它们实际上是在它们合并之前清除HtmlAttributes集合,现在清除了HtmlAttributes集合,并带有您传递的任何属性。我叫它虫子

/// <summary>Sets the HTML attributes.</summary>
/// <param name="attributes">The HTML attributes.</param>
/// <returns></returns>
public virtual TBuilder HtmlAttributes(object attributes)
{
  return this.HtmlAttributes(attributes.ToDictionary());
}

/// <summary>Sets the HTML attributes.</summary>
/// <param name="attributes">The HTML attributes.</param>
/// <returns></returns>
public virtual TBuilder HtmlAttributes(IDictionary<string, object> attributes)
{
  this.Component.HtmlAttributes.Clear();
  Kendo.Mvc.Extensions.DictionaryExtensions.Merge(this.Component.HtmlAttributes, attributes);
  return this as TBuilder;
}

考虑这一点,为了不累积多个就绪

public static DropDownListBuilder Readonly(this DropDownListBuilder builder, bool isReadOnly)
{
    const string Readonly = "readonly";
    var comp = builder.ToComponent();

    comp.HtmlAttributes.Remove(Readonly);
    if (isReadOnly)
        comp.HtmlAttributes.Add(Readonly, isReadOnly);

    return builder;
}
public static TextBoxBuilder<T> MergeHtmlAttributes<T>(this TextBoxBuilder<T> builder, object attributes)
{
    Kendo.Mvc.Extensions.DictionaryExtensions.Merge(builder.ToComponent().HtmlAttributes, attributes);
    return builder;
}
@(Html.Kendo().TextBoxFor(m => m.FirstName)
    .Enable(Model.IsViewEditable)
    .MergeHtmlAttributes(new {@class = "k-textbox"}))
public static DropDownListBuilder Readonly(this DropDownListBuilder builder, bool isReadOnly)
{
    const string Readonly = "readonly";
    var comp = builder.ToComponent();

    comp.HtmlAttributes.Remove(Readonly);
    if (isReadOnly)
        comp.HtmlAttributes.Add(Readonly, isReadOnly);

    return builder;
}