2009-08-13 2 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リテラル内のことを行うための構文のわからないんだけど、これはあなただけのXMLへのストレートLINQを使用することができ、十分に小さい:

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

私は "ラベルとそれに先行して指定することもできますfor "としていますが、例えばドロップダウンの周りに表やdivを配置したい場合は同じ質問があります。私が探していたのは、これが意図したとおりに動作するため、StringからXML要素に戻すための "Parse"でした。 <%= XElement.Parse(HtmlHelper.DropDownList(name))%> – gfrizzle

関連する問題