如何在后台代码中设置ASP.NET标签页文本并在页面加载时显示?

23

我似乎找不到解决这个问题的答案。以下是情境说明: 我有一个使用C#的ASP.NET项目。我正在使用C#(使用ADO)从sqlite数据库加载数据(用户名、电子邮件等...)。我将把数据加载到位于我的App_Data文件夹中的类文件中的静态全局变量中。我需要能够在页面加载期间将用户名插入到ASP.NET标签中。

在PHP中,我只需这样做:

<?php
function GetUserName() {
//code which retrieves username from db.
return username;
}
?>
<p>Here is the username: <?php echo GetUserName(); ?></p>

有谁能解释一下这是如何完成的吗?我对ASP.NET还不熟悉。

以下是更详细的更新。我尝试了你们提出的建议。我的页面加载函数在一个名为RankPage.aspx.cs的文件中,而它下面的表格在RankPage.aspx中。想法是列出从数据库检索到的许多用户。我只是为了测试添加了“myLabel”。现在,如果没有在我的代码后台声明“myLabel”,就会报错说“myLabel”不存在于当前上下文中。如果我使用FindControl()函数声明“myLabel”,就会得到运行时异常,指出“myLabel”未设置为对象的实例。

以下是代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Label myLabel = this.FindControl("myLabel") as Label;
        myLabel.Text = "my text";
    }
}

<table>
    <tbody>
        <tr>
            <th>Name</th>
            <th>Score</th>
        </tr>

        <tr>
            <td>name</td>
            <td>Score</td>
        </tr>

        <!-- Current User -->
        <tr>
            <td><asp:Label id="currentUserName" runat="server"></asp:Label></td>
            <td><asp:Label id="currentUserScore" runat="server"></asp:Label></td>
            <td><asp:Label ID="myLabel" runat="server" /></td>
        </tr>
        <!-- End Current User -->

    </tbody>
</table>
7个回答

34

对于这个标签:

<asp:label id="myLabel" runat="server" />

在代码后台使用(C#):

myLabel.Text = "my text"; 

更新(根据更新后的问题):

您不需要使用FindControl - 那整行代码都是多余的:

  Label myLabel = this.FindControl("myLabel") as Label;
  myLabel.Text = "my text";

应该只需:

  myLabel.Text = "my text";

Visual Studio的设计器应该创建一个文件,其中所有服务器端控件都已正确添加到类中(默认情况下为RankPage.aspx.designer.cs文件)。

您所说的是一个RankPage.cs文件 - Visual Studio的命名方式应该是RankPage.aspx.cs。您如何将这些文件链接在一起?


1
嗯...这是我最初尝试的方法,但它没有起作用。也许我遇到了不同的问题?我收到一个错误,指出标签在当前上下文中不存在。我将代码放在aspx.cs文件的Page_Load中... - David Mulder
@David - 那应该可以。最好能看到您标签的实际aspx标记和page_load处理程序中的代码,而不是您的PHP代码。 - Oded
1
啊,我想我明白发生了什么。我是在MonoDevelop中开发的,但该项目最初是在Visual Studio中创建的。不知何故,在转换项目时删除了RankPage.aspx.designer.cs文件。而RankPage.cs是一个打字错误,我是指RankPage.aspx。 - David Mulder

3

如果您只是将代码放在页面上,通常会自动生成一个字段供您使用,就像@Oded所示的那样。

在其他情况下,您始终可以使用以下代码:

Label myLabel = this.FindControl("myLabel") as Label; // this is your Page class

if(myLabel != null)
   myLabel.Text = "SomeText";

1
使用“Label myLabel = this.FindControl(“myLabel”)as Label;”会抛出一个对象引用未设置为对象实例的错误,就好像它找不到页面上的元素。而我知道该元素在页面上存在... - David Mulder
好的,最好的选择是进行空值检查;如果控件不是标签,则语句中的“as Label”部分将返回null。我会修改示例以使其更加安全。 - Tejs

2
在您的ASP.NET页面中:
<asp:Label ID="UserNameLabel" runat="server" />

在您的代码后端(假设您正在使用C#):
function Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
       UserNameLabel.Text = "User Name";
    }
}

1

我知道这篇文章发布已经很久了,而且已经被标记为已回答,但对我来说,所选的答案并没有回答我认为用户提出的问题。在我看来,他似乎正在寻找一种可以采用ASP .Net的方法,该方法对应于他以前在php中执行的内联数据绑定。

以下是他的php代码:

<p>Here is the username: <?php echo GetUserName(); ?></p>

以下是在ASP .Net中的操作:

<p>Here is the username: <%= GetUserName() %></p>

0
在页面加载事件中,您可以设置标签: lbl_username.text = "一些文本";

0
protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = "My text";
}

这是ASP.Net的基础,考虑控件而非HTML流程。

考虑参加课程或阅读初学者书籍...并且首先忘记你在PHP中做过的事情 :)


0
在你的aspx页面中尝试类似这样的东西。
<asp:Label ID="myLabel" runat="server"></asp:Label>

然后在你的代码后台,你可以直接这样做

myLabel.Text = "My Label";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接