J'essaye de créer l'aide HTML fortement typée avec la syntaxe courante. J'ai vu des exemples en ligne, mais ils utilisent tous TagBuilder
pour construire le code HTML. Au lieu de cela je veux stocker une référence à l'objet d'assistance HTML d'origine dans la classe CurrencyTextBox
pour un accès ultérieur (car il contient beaucoup d'informations utiles et je peux aussi utiliser sa méthode TextBoxFor
pour créer une zone de texte).Comment créer HtmlHelper fortement typé avec une syntaxe fluide?
Le code ci-dessous ne fonctionne pas.
Méthode d'extension
public static class CurrencyTextBoxHelper
{
public static CurrencyTextBox<TModel, TValue> CurrencyFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
return new CurrencyTextBox<TModel, TValue>(helper, expression);
}
}
de classe CurrentTextBox
public class CurrencyTextBox<TModel, TValue>: IHtmlString
{
private RouteValueDictionary _attr = null;
private HtmlHelper<TModel> _helper;
private Expression<Func<TModel, TValue>> _expression;
public CurrencyTextBox(HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression)
{
_helper = helper;
_expression = expression;
_attr = new RouteValueDictionary();
}
public CurrencyTextBox<TModel, TValue> AddClass(string class)
{
_attr.Add("class",class);
return this;
}
public CurrencyTextBox<TModel, TValue> Enabled(bool enabled)
{
if (!enabled)
{
_attr.Add("disabled", "disabled");
}
return this;
}
public string ToHtmlString()
{
return ToString();
}
public override string ToString()
{
// i get error at line below
var textBox = _helper.TextBoxFor(_expression, ModelMetadata.FromLambdaExpression(_expression, _helper.ViewData).EditFormatString, _attr);
return textBox.Tostring();
}
}
Toutefois, dans le code ci-dessus, à l'intérieur ToString()
méthode que j'obtiens l'erreur
Code de Gravité Description Proj ect Suppression de la ligne Fichier État Erreur CS1061 « HtmlHelper » ne contient pas une définition pour « TextBoxFor » et aucune méthode d'extension « TextBoxFor » accepter un premier argument de type « HtmlHelper » n'a pu être trouvée (vous manque une directive à l'aide ou une référence d'assemblage?)
Aussi est-il correct de passer htmlhelper et expression dans costructor?