Я хочу, чтобы отключить или включить текстовое поле на основе логического значения, я создал этот метод расширения:Как изменить или добавить атрибуты в html-поля с помощью html-хелпер-методов?
public static IHtmlString MyTextBoxFor<TModel,TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel,TProperty>> expression,
object htmlAttributes,
bool disabled
)
{
var attributes = new RouteValueDictionary(htmlAttributes);
if (disabled)
{
attributes.Add("disabled", "\"disabled\"");
}
return htmlHelper.TextBoxFor(expression, htmlAttributes);
}
И как я использовал:
<div class="col-md-10">
@Html.MyTextBoxFor(model => model.Body, new { @class = "form-control"}, true)
</div>
, но он не работает, я новый к классу Htmlhelper, хотя это не сложно понять, но я, конечно, что-то пропустил!
Edit:
Я попробовал этот простой метод, чтобы выяснить проблему:
public static IHtmlString MyTextBox(this HtmlHelper htmlHelper,object htmlAttributes, bool disabled)
{
IDictionary<string, object> attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
//var attrs = new Dictionary<string,string>();
if (disabled)
{
attrs.Add("disabled", "disabled");
attrs.Add("value", "txxxxxxt");
}
return htmlHelper.TextBox("txtbx", attrs);
}
И что было оказано: <input id="txtbx" name="txtbx" type="text" value="System.Collections.Generic.Dictionary``2[System.String,System.String]">
Возможно, это просто опечатка в примере: почему вы называете исходную версию 'TextBoxFor' с помощью' htmlAttributes' как параметра вместо «атрибутов»? – Markus
Я передам логическое выражение, а не просто 'true' или' false' –
попробуйте использовать 'IDictionary attrs = HtmlHelper.AnonymousObjectToHtmlAttributes (htmlAttributes);' –