如何在不对其进行编码的情况下将动态标记包含在内联XML中

时间:2009-08-13 18:24:38

标签: vb.net html-helper inline-xml

我想为我的应用中的许多页面上显示的特定类型的下拉列表创建一个HtmlHelper函数。我基本上只是想在现有的DropDownList函数周围添加一些装饰,但它正在被编码。这是我的扩展方法:

    <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 个答案:

答案 0 :(得分: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()