8

我有个疑问

以下这些类型的标签文本声明有什么区别?

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

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

我直接在 text 属性中Text="Name"提供文本并在标签字段的中心提供文本 > Name </

我的gridview控件上有更多标签,我想在编辑网格时获取标签文本值,我正在使用查找控件来获取标签值

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>) 那么 find 控件没有返回值,它返回空 ("") 。为什么 ?

编辑:

但是,如果我在 gridview 之外设置标签文本,那么两种方式都可以正常工作(如果以这两种方式设置文本,lblid.text 会给出正确的)!只有我在gridview的标签中遇到了问题!

4

5 回答 5

6

这个标签文本类型有什么区别?

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

将创建一个Label控件,哪个Text属性将具有值“名称”

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

将创建一个Label控件

  • 具有Text价值的财产String.Empty
  • 带有Literal子控件的Text属性值将是“名称”

请注意,同时使用这两种行为(设置Text属性和拥有内容)可能会导致意外行为:请参阅http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.label。文本.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

于 2013-10-25T08:18:44.210 回答
2

第一个标签会给你跨度。没有太大区别,更多的是您更喜欢在 html 中输出的内容:

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

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

当您在标签外写 Eval 时,您仍然需要添加 ' ' (单引号)尝试它,如果它不起作用,请尝试 "" 双引号。我希望我能给你一些关于你的问题的见解:)

于 2013-10-25T07:46:09.277 回答
2

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

我不确定,但这会将 asp 标签呈现为<label>,文本部分将呈现InnerText为该标签的其他标签

<asp:Label ID="lbl2" runat="server"**>Name</**asp:Label>这会将名称呈现为InnerHtml选项<label>卡的

于 2013-10-25T07:46:54.277 回答
1

最后我找到了答案。(如果我错了请纠正我)

我的代码后面有两个类

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

手动所有页面控件都由我的 Home 类定义

所以普通标签给出了正确的和两种类型的文本值

但我的下一行是使用system.Ui.Pageclass 创建新标签,

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

现在这个find-control只获取标签属性值Text="xx" 是标签的属性所以它得到了值,但是Name这个值没有存储在任何标签属性中,所以我们无法获取它。

(这只是我的猜测)

而且我猜还有一个原因(这只是个玩笑)

这个客户端<label>Text</label>控件有打开和关闭标签,但服务器端Label控件没有任何打开和关闭标签,所以这个原因我无法获取标签值在此处输入图像描述

于 2013-10-25T09:08:26.087 回答
1

asp:Label 控件呈现为跨度,而不是 html 标签元素。如果您需要访问服务器端的值,请使用 Text 属性。如果您需要使用 javascript 在客户端检索值,请使用 id.innerHTML。

于 2014-05-27T04:52:23.467 回答