簡體   English   中英

asp.net標簽文本元素和ordnary文本之間的區別

[英]Difference between asp.net label text elements and ordnary text

我有個疑問

放置元素文本的這些標簽之間有什么不同?

 <asp:Label ID="lbl2" **Text="Name"** runat="server"></asp:Label>

 <asp:Label ID="lbl2"  runat="server"**>Name</**asp:Label>

直接將文本放在文本屬性Text="Name" ,並將文本放在標簽字段的中心> Name </

我的gridview控件上有一些標簽,我想在編輯網格行時得到標簽文本值,所以我使用find控件之類的

*protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        Label xx = GridView1.Rows[e.NewEditIndex].FindControl("lbl2") as Label;
        Label yy = GridView1.Rows[e.NewEditIndex].FindControl("lbl2") as Label;
        txtName.Text = xx.Text;
        txtAge.Text = yy.Text;
    }*

她是我的gridview代碼

 <asp:TemplateField HeaderText="Name">
                        <ItemTemplate>
                            <asp:Label ID="lbl1" Text='<%#  Eval("StudentName") %>' runat="server"></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>

如果我將Eval值放在標簽Text屬性中,現在正在工作,但是如果我在標簽面的中心給出eval值( <asp:Label ID="lbl1" runat="server"><%# Eval("StudentName") %></asp:Label> )查找控件沒有得到值,它顯示為空(”“)。 為什么?

這個標簽文字類型有什么區別? 任何人請指教我!

編輯:

但是如果我在gridview外部設置標簽文本,那么兩種方式都運行良好(如果以兩種方式設置文本,則lblid.text給出正確的)! 只有我在gridview中的標簽中遇到了問題!

這個標簽文字類型有什么區別?

<asp:Label ID="lbl2" **Text="Name"** runat="server"></asp:Label>

將創建一個Label控件,其Text屬性將具有值“Name”

<asp:Label ID="lbl2"  runat="server"**>Name</**asp:Label>

將創建一個Label控件

  • Text屬性的值為String.Empty
  • 使用Literal子控件, Text屬性值為“Name”

請注意,同時使用這兩種行為(設置Text屬性和擁有內容)可能會導致意外行為:請參閱http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.label .text.aspx

注意 :設置Text屬性將清除Label控件中包含的任何其他控件。

所以我認為問題在於你寫的時候:

<asp:Label ID="lbl2"  runat="server"**><%#  Eval("StudentName") %></**asp:Label>

然后

Label xx = GridView1.Rows[e.NewEditIndex].FindControl("lbl2") as Label;
txtName.Text = xx.Text;

您正在嘗試訪問尚未成為DataBound的子Literal控件的值

不確定它會起作用還是有所作為,但您可以嘗試:

Label xx = GridView1.Rows[e.NewEditIndex].FindControl("lbl2") as Label;
xx.Controls[0].DataBind();
txtName.Text = xx.Text;

無論如何,到目前為止你應該已經想到你最好使用Label的Text屬性而不是隱式Text Literal

標簽的第一個將給你跨度。 沒有多大區別,你更喜歡把它放在html中:

< span id="MainContent_lbl2" >Name< /span >

< span id="MainContent_Label1" >Name< /span >

當你在標簽之外寫Eval時,你仍然需要添加''(單引號)試試它,如果它不起作用,試試“”雙重qoutation。 我希望我能給你一些關於你的問題的見解:)

<asp:Label ID="lbl2" **Text="Name"** runat="server"></asp:Label>

我不確定,但這會將asp標簽呈現為<label> ,文本部分將呈現為此標簽的InnerText ,其中一個

<asp:Label ID="lbl2" runat="server"**>Name</**asp:Label>這會將Name作為<label>標簽的InnerHtml呈現

最后,我找到了一個愚蠢的答案。 (我不知道這是一個答案)

對於我的codebehind有兩個類

public partial class Home : System.Web.UI.Page

手動所有頁面控件都由我的Home類定義

所以普通標簽給出了正確的兩種文本值

但我的下線是使用system.Ui.Page類創建新標簽,

Label yy = GridView1.Rows[e.NewEditIndex].FindControl("lbl2") as Label;

現在這個find-control只獲取標簽屬性值Text="xx"是標簽的屬性,所以它得到了值,但Name這個值沒有存儲在任何標簽屬性中,所以我們無法得到它。

(這是我的猜測)

而且我猜另一個原因(這只是一個笑話)

這個客戶端<label>Text</label>控件有開放和關閉標簽,但服務器端Label控件沒有任何打開和關閉標簽,所以這個原因我無法獲得標簽值:P 在此輸入圖像描述

asp:標簽控件呈現為跨距,而不是html標簽元素。 如果需要訪問服務器端的值,請使用Text屬性。 如果需要使用javascript在客戶端檢索值,請使用id.innerHTML。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM