Asp.net 如何在剑道日期选择器的扩展中添加额外的HtmLatAttributes
我试图在kendo的日期时间选择器的扩展方法中添加html属性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
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;
}