2011-10-10 54 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