【问题标题】:VB.net label using a session variable使用会话变量的 VB.net 标签
【发布时间】:2011-10-10 14:42:20
【问题描述】:

我的 vb.net 应用程序需要使用会话变量。我真的不知道如何在 ASP.net 中使用它。我一直在尝试使用我的书所拥有的东西,但我无法让这个标签起作用。我需要针对数据库验证用户输入,如果他们的代码在数据库中,文本框应该会消失,并且会出现一个标签,上面写着欢迎。

按照我的编写方式,我收到一条错误消息,提示服务器标签格式不正确,并且在代码隐藏中它说我的标签 ID 未声明。谁能发现我写的代码有什么问题?

<asp:Label ID="lblIB" runat="server" DataSourceID="dsIBs" 
Text="Welcome, <%# Eval("First_Name") %> '&' <%# Eval("Last_Name")%>">
</asp:Label>


Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal 
  args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles
  CustomValidator1.ServerValidate
    args.IsValid = True
    For Each drv As DataRowView In dsIBs.[Select](DataSourceSelectArguments.Empty)
        If drv("baccount").ToString() = args.Value Then
            args.IsValid = False
            lblIB.Visible = False
            Exit For
        End If
    Next

    If args.IsValid Then
        IBTextBox.Visible = False
        IBTextBoxButton.Visible = False
        lblIB.Visible = True
    End If
End Sub

更新:

<asp:Label ID="lblIB" runat="server" Text=""></asp:Label>

    Protected Sub CustomValidator1_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles CustomValidator1.ServerValidate
    args.IsValid = True
    For Each drv As DataRowView In dsIBs.[Select](DataSourceSelectArguments.Empty)
        If drv("baccount").ToString() = args.Value Then
            args.IsValid = False
            lblIB.Visible = False
            Exit For
        End If
    Next

    If args.IsValid Then
        IBTextBox.Visible = False
        IBTextBoxButton.Visible = False
        lblIB.Visible = True
        lblIB.Text = String.Format("Welcome, {0} {1}", Session("FirstName"), Session("LastName"))

    End If
End Sub

更新 2:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
Handles Me.Load
    lblIB.Visible = False
End Sub


If args.IsValid Then
   IBTextBox.Visible = False
   IBTextBoxButton.Visible = False
   lblIB.Visible = True
   lblIB.Text = String.Format("Welcome, {0} {1}", Session("FirstName"),
   Session("LastName"))

    Protected Sub IBTextBoxButton_Click(ByVal sender As Object, ByVal e As 
    System.EventArgs) Handles IBTextBoxButton.Click
    Session("IB") = IBTextBox.Text
    Dim IB As String = Session("IB")
    Response.Redirect(Request.RawUrl + "&IB=" + Session("IB"))
End Sub

【问题讨论】:

  • 标签是否在数据绑定控件内?
  • 不,标签就在用户用来输入代码的文本框和按钮之后。那里有一个自定义验证器,可以根据数据库中的代码验证用户的输入,但这也不起作用。

标签: asp.net vb.net session textbox label


【解决方案1】:

你的标记是错误的,因为 Label 控件没有 DataSourceID 属性,所以你应该删除它:

<asp:Label ID="lblIB" runat="server" 
Text="Welcome, <%# Eval("First_Name") %> '&' <%# Eval("Last_Name")%>">
</asp:Label>

我还将删除 Text 属性中的 Eval 表达式(除非它位于数据绑定控件 -gridview 等内部)并将其保留为:

<asp:Label ID="lblIB" runat="server" 
Text="">
</asp:Label>

最后,您应该能够在服务器端执行验证并以编程方式设置 Text 执行以下操作:

lblIB.Text = "Welcome " + First_Name + " " + Last_Name

First_Name 和 Last_Name 以某种方式从数据库中读取。

【讨论】:

  • 您可以在该行之后添加 lblIB 代码,使其在上面的代码中可见。
  • 我把 lblIB 代码放在可见后,但它说 lblIB 没有声明。我需要在某个地方为它设置一个 Dim 吗?我试过As String,但它说lbl.Text is not a member of String
  • lblIB 是您放在 .aspx 页面中的标签的 ID
  • @jlg 你不需要做 Dim 因为 lblIB 是在标记中声明的。您一定遇到了另一种问题。
  • @Icarus 我认为我不需要这样做,但这是我唯一能想到的。
【解决方案2】:

当您的服务器标签格式不正确时,这通常表明您的引用存在问题。

解析器对您使用的引号感到困惑。

幸运的是,有一个简单的解决方案。

改变:-

Text="Welcome, <%# Eval("First_Name") %> '&' <%# Eval("Last_Name")%>">

收件人:-

Text='Welcome, <%# Eval("First_Name") %> &#145;&amp;&#146; <%# Eval("Last_Name")%>'>

首先,我们在文本周围加上了单引号。这将有助于解析器识别您引用的文本实际结束的位置。

其次,我假设您实际上想要显示“&”,而不是将其用于连接。就是这个:-

&#145;&amp;&#146;

如果不需要,请删除。

最后,如果标签实际上没有被数据绑定,那么什么都不会发生。您要么需要对标签进行数据绑定,要么使用稍微不同的引用语法。

在早期版本的 VS 中发出字符串的引用语法是:-

<%= %>

.NET 4.0+ 中发出字符串的引用语法是

<%: %>

【讨论】:

  • Visual Studio 不允许我在标签中使用 。我想我必须在后面的代码中尝试一下。
【解决方案3】:

由于标签不包含在数据绑定控件中,因此您不能使用数据绑定语法(即&lt;%#)。在代码隐藏中设置标签的文本,或者像这样内联:

<asp:Label ID="Label1" runat="server" Text='<%=String.Format("{0} {1}", Session("FirstName"), Session("LastName"))%>' ... />

或者在代码隐藏中:

Label1.Text = String.Format("{0} {1}", Session("FirstName"), Session("LastName"))

【讨论】:

  • 您能告诉我 {0} {1} 是做什么用的吗?
  • 它们是指定参数放置位置的标记。例如,String.Format("My first name is {0}, and my last name is {1}", "James", "Johnson")。我更喜欢使用String.Format,因为它看起来更整洁,但你也可以这样做:Session("FirstName") &amp; " " &amp; Session("LastName")
  • 哦,好的,我尝试使用您写的第一个答案,但在我输入值之前它出现在文本框之后。我将代码更改为第二个答案,但我不知道如何隐藏文本。它说 lblIB.Visible 未声明,但是当我尝试将其声明为 String 时,它说 Text 不是 String 的成员
  • 什么?您能否更新您的代码并包含一个如何设置可见属性的示例?
  • 我删除了我在As String 声明它的部分,因为@Icarus 说我不需要这样做。我仍然得到 lblIB 没有声明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多