Метка VB.net с использованием переменной сеанса - PullRequest
1 голос
/ 10 октября 2011

Мое приложение vb.net должно использовать переменную сеанса. Я действительно не знаю, как использовать его в ASP.net. Я пытался использовать то, что есть в моих книгах, но я не могу заставить этот лейбл работать. Мне нужно, чтобы пользовательский ввод был проверен по базе данных, и если его код находится в базе данных, текстовое поле должно исчезнуть, и появится надпись с надписью Welcome.

Как я написал, я получаю сообщение об ошибке, говорящее о том, что тег сервера сформирован неправильно, и в коде указывается, что идентификатор моей метки не объявлен. Кто-нибудь может заметить какие-либо проблемы с кодом, который я написал?

<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

Ответы [ 3 ]

2 голосов
/ 10 октября 2011

Когда вы видите, что серверный тег не правильно сформирован, это обычно указывает на проблему с вашим цитированием.

Синтаксический анализатор запутывается из-за используемых вами кавычек.

К счастью, существует простойрешение.

Изменить: -

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+ - это

<%: %>
2 голосов
/ 10 октября 2011

Ваша разметка неверна, потому что элемент управления Label не имеет свойства DataSourceID, поэтому вы должны удалить его:

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

Я бы также удалил выражение Eval (если оно не находится внутри элемента управления с привязкой к данным -gridview и т. Д.) В свойстве Text и оставил бы его как:

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

Наконец, вы должны иметь возможность выполнить проверку на стороне сервера и настроить текст программно, выполнив что-то вроде:

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

Где First_Name и Last_Name каким-то образом считываются из базы данных.

1 голос
/ 10 октября 2011

Поскольку метка не содержится в элементе управления с привязкой к данным, вы не можете использовать синтаксис привязки к данным (т. Е. <%#).Либо установите текст метки в коде, либо вставьте его в строку следующим образом:

<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"))
...