0

以下を使用します。

  • MVC3
  • VB.NET
  • RAZOR VIEW エンジン
  • Html ヘルパー クラス

私のアプリケーションでは、ビューに送信されて表示されるリスト(文字列)があります。この表示を、幅が 8 列以下で行数が多い表形式で表示しようとしています。これを処理するカスタム ヘルパー クラスを作成しましたが、ビューにはメール アドレスを含む生の html コードが表示されていますが、行などを含むテーブルとしてレンダリングされていません。 、テンプレート、そして最後にビューです。

Imports System.Runtime.CompilerServices
Public Module TableHelper
<Extension()> _
Public Function CreateEmailTable(ByVal helper As HtmlHelper, ByVal emaillist As List(Of String)) As MvcHtmlString
    Dim htmlDisplayer As String = Table()
    Dim counter As Integer = 0
    For Each item In emaillist
        If counter = 0 Then
            htmlDisplayer = htmlDisplayer + NRow()
        End If
        counter += 1
        If Not counter >= 8 Then
            htmlDisplayer = htmlDisplayer + Ntd(item)
        Else
            counter = 0
            htmlDisplayer = htmlDisplayer + CRow()
        End If
    Next
    htmlDisplayer = htmlDisplayer + CTable()
    Dim x As MvcHtmlString = MvcHtmlString.Create(htmlDisplayer)
    Return x
End Function
Public Function Table() As String
    Return String.Format("<table>")
End Function
Public Function CTable() As String
    Return String.Format("</table>")
End Function
Public Function NRow() As String
    Return String.Format("<tr>")
End Function
Public Function CRow() As String
    Return String.Format("</tr>")
End Function
Public Function Ntd(ByVal text As String) As String
    Return String.Format("<td>{0}</td>", text)
End Function
End Module

テンプレート ビューは次のとおりです。

@ModelTYPE List(Of String)
@Html.CreateEmailTable(Model)

最後に、ビューは次のとおりです。

Modeltype xxxxxxxxx.EmailsVM
@Code
ViewData("Title") = "Mass Emails Sent"
End Code
@Using Html.BeginForm
@<fieldset>
<p>
@Html.Partial("_EmailsVM", Model.failEmList)
</p>
</fieldset>
End Using

これは、ブラウザーで表示したときに表示されるビュー ページのソースのスニペットです。

  &lt;table&gt;&lt;tr&gt;&lt;td&gt;xxxxxxxxx@yahoo.com; &lt;/td&gt;&lt;td&gt;xxxxxxxx@xxxxxxx.net; &lt;/td&gt;&lt;td&gt;xxxxx.xxxxxxxx@xxxxx; &lt;/td&gt;&lt;td&gt; 

ご覧のとおり、HTML マークアップは、ブラウザーが認識できる書式設定を失っています...

4

1 に答える 1

1

.NET 文字列は、デフォルトで HTML エンコードされています。を使用Html.Raw()して未加工の HTML を出力するかMvcHtmlString、MVC エンジンがすでにエンコードされていることを認識しており、再度エンコードしないことを認識している を返すことができます。

リファレンス: MvcHtmlString クラス - MSDN

于 2012-08-14T02:30:35.297 に答える