Question

Je voudrais créer une fonction HtmlHelper pour un certain type de menu déroulant qui apparaît sur de nombreuses pages dans mon application. Je suis fondamentalement juste essayer d'ajouter une décoration autour de la fonction DropDownList existante, mais il est codé. Voici ma méthode d'extension:

    <Extension()> _
    Public Function Year(ByVal HtmlHelper As System.Web.Mvc.HtmlHelper, ByVal name As String) As String

        Return _
            <label>
                Year:
                <%= HtmlHelper.DropDownList(name) %>
            </label>.ToString

    End Function

renvoie les éléments suivants:

<label>Year:&lt;select id="year" name="year"&gt;&lt;option value="2007"&gt;2007&lt;/option&gt;&lt;option value="2008"&gt;2008&lt;/option&gt;&lt;option selected="selected" value="2009"&gt;2009&lt;/option&gt;&lt;/select&gt;</label>

au lieu de ce que je veux:

<label>Year:<select id="year" name="year"><option value="2007">2007</option><option value="2008">2008</option><option selected="selected" value="2009">2009</option></select></label>

En d'autres termes, le DropDownList est HTML codé avant que la chaîne est placée à l'intérieur de l'étiquette. Je pouvais le faire comme ceci:

    <Extension()> _
    Public Function Year(ByVal HtmlHelper As System.Web.Mvc.HtmlHelper, ByVal name As String) As String

        Return "<label>Year:" & HtmlHelper.DropDownList(name) & "</label>"

    End Function

mais je préfère faire usage de XML en ligne de VB. Comment puis-je obtenir les résultats de DropDownList à ne pas être codés?

Était-ce utile?

La solution

Tout d'abord, vous ne voulez vraiment l'étiquette pour entourer le menu déroulant au lieu de précédent?

Alors, je crois que HtmlHelper.DropDownList(name) retourne une chaîne? Alors bien sûr, il doit être codé. Si vous voulez XML, vous devez utiliser quelque chose comme XElement.Parse(HtmlHelper.DropDownList(name)) à la place.

Je ne suis pas sûr de la syntaxe de le faire dans un littéral XML, mais cela est assez petit, vous pouvez simplement utiliser LINQ directement à XML:

Dim result as XElement = New XElement("label", _
   XElement.Parse( HtmlHelper.DropDownList(name)))
Return result.ToString()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top