代码之家  ›  专栏  ›  技术社区  ›  gfrizzle

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

  •  0
  • gfrizzle  · 技术社区  · 17 年前

    我想为出现在我的应用程序的许多页面上的特定类型的下拉列表创建一个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 回复  |  直到 17 年前
        1
  •  1
  •   John Saunders    17 年前

    首先,您真的希望标签围绕下拉列表而不是在其前面吗?

    然后,我就知道了 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()