Question

Je crée donc une méthode d'extension HtmlHelper et j'ai rencontré un problème lors de l'utilisation de TagBuilder.SetInnerText (). L'assistant génère une étiquette d'option. Voici la source de l'aide:

public static string Option(this HtmlHelper helper, string value, string text, object htmlAttributes) {
        TagBuilder tagBuilder = new TagBuilder("option");

        tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        tagBuilder.MergeAttribute("value", value);
        tagBuilder.SetInnerText(text);

        return tagBuilder.ToString(TagRenderMode.SelfClosing);
    }

À mon avis, j'appelle

<%= Html.Option("value", "text", new { }) %>

mais le texte intérieur de la balise n'est pas défini et il me reste

<option value="value"> </option>

Des idées sur la raison pour laquelle SetInnerText () ne définit pas le texte correctement?

Merci.

Était-ce utile?

La solution

return tagBuilder.ToString(TagRenderMode.SelfClosing) - is the problem

Il essaie de générer une sortie <option value="" />, où il n’ya nulle part où insérer InnerText.

Faites-le:

return tagBuilder.ToString(TagRenderMode.Normal)

Autres conseils

Je pense que la bonne façon d'utiliser InnerText est la suivante. Vous devez définir <=> sur Créer une balise, et après avoir défini des attributs supplémentaires.

TagBuilder tagBuilder = new TagBuilder("select")
{
    InnerHtml = "set Anything"
};
tagBuilder.MergeAttribute("value", value);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top