2011-10-10 58 views
1

我的vb.net应用程序需要使用会话变量。我真的不知道如何在ASP.net中使用它。我一直在尝试使用我的书,但是我无法获得这个标签。我需要根据数据库对用户输入进行验证,如果他们的代码位于数据库中,那么文本框应该消失,并且会出现一个标签,表示欢迎。使用会话变量的VB.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 

UPDATE:

<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 
+0

是数据绑定控件内的标签? –

+0

不,标签只是坐在文本框和用户用来输入代码的按钮之后。在那里有一个自定义的验证器来验证用户对数据库中代码的输入,但这也不起作用。 – jlg

回答

2

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

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

我也将消除评估和演示表达(除非它是一个数据绑定控件-gridview,etc-内)的Text属性,并把它作为:

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

最后,你应该能够完成您的验证在服务器端设置文本编程方式做类似:

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

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

+0

您可以在使代码在上面的代码中可见之后立即添加lblIB代码。 – Bill

+0

我把lblIB代码放在可见的位置后,但它说lblIB没有声明。我需要为某个地方设置一个Dim吗?我尝试了'作为字符串',但它说'lbl.Text不是字符串的成员' – jlg

+0

lblIB是您放在您的.aspx页面中的标签的ID

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+发射串是

<%: %> 
+0

Visual Studio不会让我在标签中使用<% %>。我想我必须在后面的代码中尝试它。 – jlg

1

由于标签是不含有在数据绑定控件中,您不能使用数据绑定语法(即<%#)。无论是设置标签的文本中隐藏代码,或做内联这样的:

<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

您能否告诉我{0} {1}的用途是什么? – jlg

+0

它们是指定参数放置位置的标记。例如,'String.Format(“我的名字是{0},我的姓氏是{1}”,“James”,“Johnson”)'。我更喜欢使用'String.Format',因为它看起来整洁,但你也可以这样做:'Session(“FirstName”)&“”&Session(“LastName”)' –

+0

噢好吧,我试着用第一个答案写了,但它显示在输入值之前的文本框之后。我将代码更改为第二个答案,但我无法弄清楚如何隐藏文本。它说lblIB.Visible没有声明,但是当我尝试将它声明为字符串时,它说文本不是字符串的成员 – jlg