【问题标题】:Difference between asp.net label text elements and ordnary textasp.net标签文本元素与普通文本的区别
【发布时间】:2013-10-25 07:28:56
【问题描述】:

我有疑问

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

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

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

我直接在文本属性Text="Name" 中提供了文本,并在标签字段&gt; Name &lt;/ 的中心提供了文本

我的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;
    }

这是我的网格视图代码

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

如果我将 Eval 值放在标签 Text 属性中,它工作正常,但如果我在标签中心提供 eval 值,例如 (&lt;asp:Label ID="lbl1" runat="server"&gt;&lt;%# Eval("StudentName") %&gt;&lt;/asp:Label&gt;),则查找控件没有返回值,它返回空("") 。为什么?

编辑:

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

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

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

    <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 属性值为“名称”

    请注意,同时使用这两种行为(设置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;
    

    您正在尝试访问尚未数据绑定的子 Literal 控件的值

    不确定它是否会起作用或有所作为,但您可以尝试:

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

    无论如何,现在您应该已经想到最好使用 Label 的 Text 属性,而不是隐式 Text Literal

    【讨论】:

    • 但是如果我在 gridview 之外设置标签文本,两种方式都工作得很好(lblid.text 给出正确的)!只有我在 gridview 的标签中遇到了问题!
    • 您好,我猜对了吗?请看我的回答?这就是那个错误的机会吗?
    • @RameshRajendran 在 GridView 之外,您必须将
    • 我无法将 # 更改为 = ,因为如果我使用 # 仅从 gridview 数据源获取值,否则它只显示普通文本,例如
    • 对不起:我收到一个错误Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control.,我在运行时看到使用断点的行'它只有空值,当我使用标签中心的值打开和关闭标签时
    【解决方案2】:

    &lt;asp:Label ID="lbl2" **Text="Name"** runat="server"&gt;&lt;/asp:Label&gt;

    我不确定,但这会将 asp 标签呈现为 &lt;label&gt;,文本部分将呈现为该标签的 InnerText,而其他标签的文本部分将呈现为 InnerText

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

    【讨论】:

    • 你完全错了。 &lt;asp:Label 呈现为跨度。请参阅photowalker 的另一个答案。
    • 您好,我猜对了吗?请看我的回答?这就是那个错误的机会吗?
    【解决方案3】:

    第一个标签会给你跨度。没有太大区别,你更喜欢什么 在 html 中输出:

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

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

    【讨论】:

    • 你好,我猜对了吗?请看我的回答?这就是那个错误的机会吗?
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      终于找到了答案。 (如果我错了,请纠正我)

      我的代码后面有两个类

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

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

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

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

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

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

      (这只是我的猜测)

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

      这个客户端&lt;label&gt;Text&lt;/label&gt;控件有打开和关闭标签,但是服务器端Label控件没有任何打开和关闭标签,所以这个原因我无法获取标签值

      【讨论】:

      • +1 now this find-control get only the label properties value Text="xx" is property of the label so it's get the values , but Name this value is not stored in the any label properties , So we can't get it .
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多