2009-08-13 13 views
0

Je souhaite créer une fonction HtmlHelper pour un type spécifique de liste déroulante qui apparaît sur plusieurs pages de mon application. Je suis simplement en train d'essayer d'ajouter une décoration autour de la fonction DropDownList existante, mais elle est en cours d'encodage. Voici ma méthode d'extension:Comment inclure un balisage dynamique dans un fichier XML incorporé sans le coder

<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 

Ce retourne 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 mettre à l'intérieur de l'étiquette. Je pourrais 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 utiliser le XML en ligne de VB. Comment obtenir les résultats de DropDownList pour ne pas être codés?

Répondre

1

Tout d'abord, vouliez-vous vraiment que l'étiquette entoure la liste déroulante au lieu de la précéder?

Puis, je comprends que HtmlHelper.DropDownList(name) renvoie une chaîne? Alors bien sûr, il devrait être encodé. Si vous voulez XML, alors vous devriez 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() 
+0

je pourrais faire précéder de l'étiquette et de préciser " pour ", mais j'aurais la même question si je voulais mettre une table ou un div autour de la liste déroulante, par exemple. Il semble que tout ce que je cherchais était "Parse" pour le faire revenir d'une chaîne à un élément XML, car cela fonctionne maintenant comme prévu: <% = XElement.Parse (HtmlHelper.DropDownList (name))%> – gfrizzle

Questions connexes