Comment inclure le balisage dynamique XML en ligne sans qu'il soit encodée
-
16-09-2019 - |
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:<select id="year" name="year"><option value="2007">2007</option><option value="2008">2008</option><option selected="selected" value="2009">2009</option></select></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?
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()