Je veux désactiver ou activer une zone de texte basée sur la valeur booléenne, j'ai créé cette méthode d'extension:Comment changer ou ajouter des attributs aux champs html via des méthodes d'aide 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);
}
Et comment je:
<div class="col-md-10">
@Html.MyTextBoxFor(model => model.Body, new { @class = "form-control"}, true)
</div>
mais ca marche pas, je suis nouveau à la classe Htmlhelper, même si ce n'est pas difficile à comprendre, mais j'ai certainement raté quelque chose!
Edit:
J'ai essayé cette méthode simple, pour trouver le problème:
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);
}
et qui a été rendu: <input id="txtbx" name="txtbx" type="text" value="System.Collections.Generic.Dictionary``2[System.String,System.String]">
Peut-être que c'est juste une faute de frappe dans l'exemple: pourquoi appelez-vous la version originale de 'TextBoxFor' avec' htmlAttributes' comme paramètre à la place d'attributs? – Markus
Je vais passer une expression booléenne, pas simplement 'true' ou' false' –
essayez d'utiliser 'IDictionary attrs = HtmlHelper.AnonymousObjectToHtmlAttributes (htmlAttributes);' –