簡體   English   中英

使用RenderControl ASP.NET VB HTML時將空白輸入顯示為方括號

[英]Empty input shown as brackets when using RenderControl ASP.NET VB HTML

作為我先前問題的偽跟進。

我當前的代碼類似於以下內容:

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="MyPage.aspx.vb" Inherits="Project.MyPage" EnableEventValidation="false" %>
<head>...</head>
<body id="Body" class="Window" runat="server">
<form id="MyForm" runat="server" defaultbutton="SubmitLinkButton">
    <!-- Markup for a the SubmitLinkButton and DropDownList -->
    <!--    to pick which Table is shown                    -->
    <asp:Table ID="Table1" runat="server">
        <asp:TableRow class="row" runat="server">
            <asp:TableCell runat="server">
                <pre>    Some Input1    </pre>
                <pre>___________________</pre>
                <pre>|___<asp:Textbox ID="Textbox1" runat="server"></asp:Textbox>____|</pre>
                <pre>|_________________|</pre>
            </asp:TableCell>
        </asp:TableRow>
    </asp:Table>
    <asp:Table ID="Table2" runat="server">
        <asp:TableRow class="row" runat="server">
            <asp:TableCell runat="server">
                <pre>    Some Input2    </pre>
                <pre>___________________</pre>
                <pre>|___<asp:Textbox ID="Textbox2" runat="server"></asp:Textbox>____|</pre>
                <pre>|_________________|</pre>
            </asp:TableCell>
        </asp:TableRow>
    </asp:Table>
</form>
</body>

重要的方法...

Public Sub SubmitLinkButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles SubmitLinkButton.Click
    Dim result As String = vbNull

    Dim sw As New StringWriter
    Dim htmlWriter As New HtmlTextWriter(sw)

    If (DropDownList.SelectedValue IsNot "") Then
        Try
            Select Case DropDownList.SelectedValue
                Case "Table1"
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Table)
                    Table1.RenderControl(htmlWriter)
                Case "Table2"
                    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Table)
                    Table2.RenderControl(htmlWriter)
            End Select

            htmlWriter.RenderEndTag()
            htmlWriter.Flush()

            result = sw.ToString()
        Finally
            htmlWriter.Close()
            sw.Close()
        End Try

        With New [Reference To A Class]
            .SendMyEmail("Email Header", result) 'Email(header, body)
        End With
    Else
        'Do something else that isn't important right now
    End If
End Sub

Public Overrides Sub VerifyRenderingInServerForm(control As Control)
    'No code necessary
End Sub

所有這些東西都有效! 我采用表單,將html呈現為result變量,然后通過電子郵件發送出去! 真棒!

我當前的問題是:

A)當任何用戶輸入為空時,空輸入將准確呈現為[ ] [ ,然后是10個空格] 不幸的是,這弄亂了表格的格式。 它寫出來看起來像一個類似ASCII的表。 有沒有一種方法可以將沒有用戶輸入的內容僅顯示為輸入元素所允許的空白? (例如<asp:Textbox ... Columns="8" ...></asp:Textbox>僅顯示為 (八個空格)。

B)在提交時,我收到了電子郵件,但是網頁上顯示“一個頁面只能有一個服務器端Form標記”。 錯誤信息。 只有一個Form標簽。 即使沒有詳細說明,您在上面的示例代碼中看到的標記也是准確的。

C)用戶需要能夠打印此表格。 CSS中有特定的分頁符設置,但是通過電子郵件發送后,這些分頁符就不存在了。 如何獲得此表格以打印出用戶想要的方式?

編輯 :我可以想到的一種解決方法是以某種方式發送HTML表單。 執行類似打印到PDF的操作,然后通過電子郵件而不是“渲染的HTML表單”發送PDF。 任何幫助都是極好的!

編輯:我更改了SubmitLinkButton_Click代碼以專門查看每個表,而不是整個表單。

您應該能夠通過類似下面的代碼(從https://stackoverflow.com/a/4674181/2953322 )從代碼隱藏中檢索和設置控件的文本值:

' Function to find controls
Public Shared Function FindControlRecursive(ByVal list As List(Of Control), ByVal parent As Control, ByVal ctrlType As System.Type) As List(Of Control)
    If parent Is Nothing Then 
        Return list
    If parent.GetType Is ctrlType Then
        list.Add(parent)
    End If
    For Each child As Control In parent.Controls
        FindControlRecursive(list, child, ctrlType)
    Next
    Return list
End Function

您的代碼:

Case "Table1"

    Dim allInputs As New List(Of Control)
    For Each txtBox As TextBox In FindControlRecursive(allInputs, Me, GetType(TextBox))
        If String.IsNullOrEmpty(txtBox.Text) Then
            txtBox.Text = "        "
        End If
    Next

    htmlWriter.RenderBeginTag(HtmlTextWriterTag.Table)
    Table1.RenderControl(htmlWriter)

Case "Table2"

'Rest of your code

順便說一句,我在評論中加了8個空格,顯然它被格式化為“”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM