我的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
答案 0 :(得分:2)
您的标记错误,因为Label控件没有DataSourceID属性,因此您应该将其删除:
<asp:Label ID="lblIB" runat="server"
Text="Welcome, <%# Eval("First_Name") %> '&' <%# Eval("Last_Name")%>">
</asp:Label>
我还会删除Text属性中的Eval表达式(除非它位于数据绑定控件-gridview,etc-中)并保留为:
<asp:Label ID="lblIB" runat="server"
Text="">
</asp:Label>
最后,您应该能够在服务器端执行验证,并以编程方式设置Text,例如:
lblIB.Text = "Welcome " + First_Name + " " + Last_Name
以某种方式从数据库中读取First_Name和Last_Name。
答案 1 :(得分:2)
如果您的服务器代码格式不正确,通常会导致引用出现问题。
解析器对您使用的引号感到困惑。
幸运的是,有一个简单的解决方案。
更改: -
Text="Welcome, <%# Eval("First_Name") %> '&' <%# Eval("Last_Name")%>">
要: -
Text='Welcome, <%# Eval("First_Name") %> ‘&’ <%# Eval("Last_Name")%>'>
首先,我们在文本周围加上单引号。这将有助于解析器识别引用文本的实际结束位置。
其次,我假设你实际上想要显示'&amp;',而不是用它来连接。就是这样: -
‘&’
如果您不需要,请删除。
最后,如果标签实际上不是数据绑定,那么什么都不会发生。您需要对标签进行数据绑定或使用稍微不同的引用语法。
在早期版本的VS中发出字符串的引用语法是: -
<%= %>
在.NET 4.0+中发出字符串的引用语法是
<%: %>
答案 2 :(得分:1)
由于Label不包含在数据绑定控件中,因此您无法使用数据绑定语法(即<%#
)。在代码隐藏中设置Label的文本,或者像这样内联:
<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"))