2009-08-13 13 views
0

我想創建一個HtmlHelper函數,用於在我的應用程序的許多頁面上顯示的特定種類的下拉列表。我基本上只是試圖在現有的DropDownList函數上添加一些裝飾,但它正在編碼。這裏是我的擴展方法:如何在內聯XML中包含動態標記而不編碼

<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 

這將返回以下:

<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> 

,而不是我想要的東西:

<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> 

換句話說,將DropDownList是HTML編碼之前的字符串放在標籤內。我可以這樣做:

<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 

但我寧願使用VB的內聯XML。我如何得到DropDownList的結果不被編碼?

回答

1

首先,您是否真的希望標籤圍繞下拉菜單而不是前面的標籤?

然後,我收集到HtmlHelper.DropDownList(name)返回一個字符串?那當然,它應該被編碼。如果你想要XML,那麼你應該使用類似XElement.Parse(HtmlHelper.DropDownList(name))的東西。

我不知道語法做一個XML裏面的文字,但是這是足夠小,你可以只使用直的LINQ to XML:

Dim result as XElement = New XElement("label", _ 
    XElement.Parse(HtmlHelper.DropDownList(name))) 
Return result.ToString() 
+0

我可以與標籤在它前面,並指定「 for「,但如果我想在下拉菜單中放置一個表格或div,我會遇到同樣的問題。它看起來像我一直在尋找的是「解析」將它從一個字符串變成一個XML元素,因爲它現在按預期工作: <%= XElement.Parse(HtmlHelper.DropDownList(name))%> – gfrizzle 2009-08-13 20:29:48

相關問題