无法在Asp.net中的换行符上拆分textarea值

时间:2014-07-21 17:04:53

标签: html asp.net vb.net

我正在尝试使用textarea将用户输入作为单独的条目从textarea中获取。

我的文本区域:

<asp:TextBox runat="server" TextMode="MultiLine" ID="uploadFieldChoices"></asp:TextBox>

在textarea上看到textarea的价值:

enter image description here

代码检索的textarea值:

enter image description here

然后我想要以XML格式存储并使用它来生成一个下拉列表,其中包含这三个条目作为选项。

要抓住我正在尝试做的就是在换行符上拆分textarea值并将其用作我的值来存储为XmlNodes:

代码

If lstrFieldType = "Dropdown" Then
    Dim lnodChoices As XmlNode = ldocFieldList.CreateElement("options")
    Dim larrSplit() As String = uploadFieldChoices.Text.Split(Environment.NewLine)
    For Each lstrOption As String In larrSplit
        If Not lstrOption.Trim = "" Then
            Dim lnodOption As XmlNode = ldocFieldList.CreateElement("option")
            lnodOption.InnerText = lstrOption
            lnodChoices.AppendChild(lnodOption)
        End If
    Next
    lnodUploadField.AppendChild(lnodChoices)
End If

但到目前为止,我无法让larrSplit实际上给我一个以上的值。奇怪的是,即使上面只给我一个XmlNode,xml文件实际上会在条目中有换行符!

我知道普通的VB文本框有一个“.lines”属性,它提供了我正在寻找的内容,但它不是Web.Textbox控件中的属性。

我也试过了:

Dim larrSplit() As String = uploadFieldChoices.Text.Split("\n\r")
Dim larrSplit() As String = uploadFieldChoices.Text.Split(vbNewLine)
Dim larrSplit() As String = uploadFieldChoices.Text.Split(vbCrLf)

但没有工作。

为什么这不起作用,是否有比上述完全不同的更好方法?

谢谢!

修改

包含textarea的代码,因为它可能是相关的。

修改2

包含文本框和值的图像。

2 个答案:

答案 0 :(得分:1)

我使用这些控件在VS2008中制作了粗略的网页表单:

<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"></asp:TextBox><br />
<asp:Button ID="Button1" runat="server" Text="Button" /><br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label><br />

并使用此代码:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
    Dim t = TextBox1.Text
    Dim s As String = ""
    For Each c In t
        s &= Asc(c).ToString() & " "
    Next
    Label1.Text = s

    ' this part added after checking what the line separators are in a multi-line TextBox
    Dim myLines = t.Split(New String() {vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
    Dim u As String = ""
    For Each l In myLines
        u &= String.Format("*{0}* ", l)
    Next
    Label2.Text = u

End Sub

要获得此结果:

enter image description here

调试器中的数据可视化器不会将换行符显示为换行符,除非您单击小放大镜图标旁边的扩展器并选择“Text Visualizer”。

相关:What character represents a new line in a text area

所以答案是确认TextArea中的.Text具有预期的行分隔符并将其拆分,如上所示。

答案 1 :(得分:0)

你试过这样的事吗?这将在"\n", "\r", "\n\r"或它们的组合上拆分,并将结果存储在字符串数组中。

Dim larrSplit As String() = uploadFieldChoices.Text.Split(new String() {Environment.NewLine},
                                   StringSplitOptions.None)

修改:添加了包含结果的图片。 enter image description here 编辑1:根据您编辑的问题,您的textarea值似乎并未真正被换行符拆分,而是空白。通过指定没有参数的String.Split来尝试更新的代码,这将按空格分割,如果您在If Not lstrOption.Trim = "" Then循环中另外检查For Each,您将获得三个值。

 Dim larrSplit As String() = uploadFieldChoices.Text.Split()

 For Each lstrOption As String In larrSplit
     If Not lstrOption.Trim = "" Then
         ....
         Response.Write(lstrOption.ToString())
     End If
 Next