VB.net l'étiquette à l'aide d'une variable de session
Mon vb.net l'application a besoin d'utiliser une variable de session. Je ne sais pas vraiment comment l'utiliser ASP.net. J'ai essayé d'utiliser ce que mes livres, mais je ne peux pas obtenir ce label de travail. J'ai besoin de l'entrée de l'utilisateur pour être validé sur la base de données et si leur code est dans la base de données, la zone de texte doit disparaître et une étiquette apparaîtra dire Bienvenue.
La façon dont je l'ai écrit, j'obtiens un message d'erreur indiquant que le serveur de la balise n'est pas bien formé et dans le codebehind il est dit que l'ID de mon label n'est pas déclaré. Quelqu'un peut-il repérer les problèmes avec le code que j'ai écrit?
<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
Mise à JOUR:
<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
Mise à JOUR 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
- Est l'Étiquette à l'intérieur d'un contrôle lié aux données?
- Non, l'étiquette est assis juste après la zone de texte et le bouton que l'utilisateur utilise pour entrer leur code. Il y a un validateur personnalisé afin de valider l'entrée d'un utilisateur contre les codes dans la base de données, mais cela ne fonctionne pas non plus.
Vous devez vous connecter pour publier un commentaire.
Votre balisage est mauvais parce que l'Étiquette de contrôle ne dispose pas d'un DataSourceID de la propriété, de sorte que vous devriez le supprimer:
Je voudrais aussi supprimer le Eval expression (sauf si c'est à l'intérieur d'un contrôle lié aux données -gridview, etc) dans le Texte de la propriété et de le laisser tel:
Enfin, vous devriez être en mesure d'effectuer votre validation côté serveur et définir le Texte par programmation en faisant quelque chose comme:
Où First_Name et Last_Name sont lues à partir de la base de données d'une certaine manière.
As String
, mais il ditlbl.Text is not a member of String
Lorsque vous obtenez la balise de serveur n'est pas bien formé, ce sont généralement des points à un problème avec votre citant.
L'analyseur est confuse sur le devis que vous utilisez.
Heureusement, il existe une solution simple.
Changement :-
À:-
Tout d'abord, nous avons mis des guillemets simples autour du texte. Cela va aider à l'analyseur de reconnaître l'endroit où votre texte cité se termine effectivement.
Deuxième, je suppose que vous voulez réellement pour afficher le '&', et ne pas l'utiliser pour la concaténation. C'est ce peu :-
Supprimer si vous n'en avez pas besoin.
Enfin, si l'étiquette n'est pas réellement lié aux données, alors rien ne se passera. Vous avez besoin soit de databind l'étiquette ou l'utilisation légèrement différente de la syntaxe des guillemets.
Citant la syntaxe pour l'émission d'une chaîne de caractères dans les versions antérieures de VS est :-
Citant la syntaxe pour l'émission d'une chaîne .NET 4.0+ est
Depuis l'Étiquette n'est pas contenue dans un contrôle lié aux données, vous ne pouvez pas utiliser la liaison de données syntaxe (c'est à dire
<%#
). Définir le texte de l'Étiquette dans le code-behind, ou de le faire inline comme ceci:Ou dans le code-behind:
String.Format("My first name is {0}, and my last name is {1}", "James", "Johnson")
. Je préfère utiliserString.Format
car il a l'air plus propre, mais vous pouvez le faire aussi:Session("FirstName") & " " & Session("LastName")
As String
parce @Icare dit que je ne devrais pas en avoir besoin. J'ai toujours l'lblIB n'est pas déclaré si.IBTextBox
etIBTextBoxButton
sont encore visibles? Êtes-vous sûr que la logique de validation fonctionne correctement? Avez-vous mis un point d'arrêt et marche à travers la logique pour s'assurerargs.IsValid
est configuré correctement?