使用 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 space 秒,然后 ]
。不幸的是,这会打乱表格的格式。它被写成看起来像一个类似 ASCII 的 table。有没有办法将没有用户输入显示为输入元素允许的空 space? (例如 <asp:Textbox ... Columns="8" ...></asp:Textbox>
仅显示为
(八个 space)。)
B) 提交后,我收到了电子邮件,但网页显示 "A page can have only one server-side Form tag." 错误消息。只有一个 Form 标签。您在上面的示例代码中看到的标记是准确的,尽管它并不详细。
C) 用户需要能够将此表格打印出来。 CSS 中有特定的分页符设置,但一旦通过电子邮件发送,这些分页符就不存在了。我怎样才能让这个表格以用户想要的方式打印出来?
EDIT:我能想到的一种解决方法是发送以某种方式打印的 HTML 表单。执行打印为 PDF 之类的操作,并在电子邮件中发送 PDF 而不是呈现的 HTML 表单。任何帮助都会很棒!
编辑: 我更改了 SubmitLinkButton_Click
代码以专门查看每个 table 而不是整个表格。
您应该能够从代码隐藏中检索和设置控件的文本值(来自 ):
' 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个空格,显然它被格式化为“”。
作为我的
我当前的代码类似于以下内容:
<%@ 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 space 秒,然后 ]
。不幸的是,这会打乱表格的格式。它被写成看起来像一个类似 ASCII 的 table。有没有办法将没有用户输入显示为输入元素允许的空 space? (例如 <asp:Textbox ... Columns="8" ...></asp:Textbox>
仅显示为 (八个 space)。)
B) 提交后,我收到了电子邮件,但网页显示 "A page can have only one server-side Form tag." 错误消息。只有一个 Form 标签。您在上面的示例代码中看到的标记是准确的,尽管它并不详细。
C) 用户需要能够将此表格打印出来。 CSS 中有特定的分页符设置,但一旦通过电子邮件发送,这些分页符就不存在了。我怎样才能让这个表格以用户想要的方式打印出来?
EDIT:我能想到的一种解决方法是发送以某种方式打印的 HTML 表单。执行打印为 PDF 之类的操作,并在电子邮件中发送 PDF 而不是呈现的 HTML 表单。任何帮助都会很棒!
编辑: 我更改了 SubmitLinkButton_Click
代码以专门查看每个 table 而不是整个表格。
您应该能够从代码隐藏中检索和设置控件的文本值(来自 ):
' 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个空格,显然它被格式化为“”。