エンコードせずにインラインXMLに動的マークアップを含める方法
-
16-09-2019 - |
質問
アプリの多くのページに表示される特定の種類のドロップダウンのために、HTMLHELPER関数を作成したいと思います。私は基本的に、既存のドロップダウンリスト関数の周りに装飾を追加しようとしていますが、エンコードされています。これが私の拡張方法です:
<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:<select id="year" name="year"><option value="2007">2007</option><option value="2008">2008</option><option selected="selected" value="2009">2009</option></select></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>
言い換えれば、ドロップダウンリストは、文字列がラベル内に配置される前に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を利用したいです。ドロップダウンリストの結果をエンコードしないようにするにはどうすればよいですか?
解決
まず第一に、あなたは本当にそれを先行するのではなく、ドロップダウンを囲むラベルを本当に望んでいましたか?
それから、私はそれを集めます HtmlHelper.DropDownList(name)
文字列を返しますか?もちろん、エンコードする必要があります。 XMLが必要な場合は、 XElement.Parse(HtmlHelper.DropDownList(name))
代わりは。
XMLリテラル内でそれを行う構文はわかりませんが、これはXMLにストレートLinqを使用できるほど小さいです。
Dim result as XElement = New XElement("label", _
XElement.Parse( HtmlHelper.DropDownList(name)))
Return result.ToString()
所属していません StackOverflow