【问题标题】:Can not get Text property from asp:Label after changing it with javascript使用javascript更改后无法从asp:Label获取Text属性
【发布时间】:2015-07-19 23:45:47
【问题描述】:

我有这个 javascript 函数:

<script type="text/javascript">
    function DisplayTime() {
        var d = new Date();
        document.getElementById('<%=Label1.ClientID %>').innerHTML = d.localeFormat("yyyy-mm-dd HH:mm:ss");
    }
</script>

我有这个标签:

<asp:Label ID="Label1" runat="server" Text ="labelText" ></asp:Label>

在 CodeBehind 中我这样做:

Page.ClientScript.RegisterStartupScript(GetType(), "DisplayTime", "DisplayTime();", true);
string text = Label1.Text;

DisplayTime() 函数工作正常。

运行时在浏览器中显示的 Label1 文本是: 2015-21-08 17:21:36

但是当我尝试从 CodeBehind 读取 Label1 的文本属性时,我得到了原始文本值: “标签文本”

有人知道为什么吗?

问候 鲁本克

【问题讨论】:

  • asp标签标签使用一个名为Text的属性来构建一个html标签标签的innerHTML。 Javascript 正在设置由 asp 创建的 html 标签元素的 innerHTML,但无法直接访问 asp 对象。您的 CodeBehind 正在从 asp 标签中获取属性 Text。 (服务器端客户端逻辑是分开的)
  • 您应该使用隐藏控件而不是标签,这是 user2782001 忘记说的。还有stackoverflow.com/questions/274826/…
  • 感谢大家的回复

标签: javascript c#


【解决方案1】:

我在这里找到了解决方案: Retrieve Client's Today's Date using ASP.NET

【讨论】:

  • 酷。在您的链接中,有一点 JavaScript 说:// re-load the page, so that the cookie value is picked up by the server and client's time is calculated。这当然是将更改发送回服务器的原因。
【解决方案2】:

有人知道为什么吗?

简答

string text = Label1.Text; 语句在服务器端运行。 DisplayTime() 函数在客户端运行。由于服务器端代码在客户端代码运行之前运行,因此服务器不知道DisplayTime() 将进行哪些更改。您需要将更改发送回服务器。

进一步说明

在 ASP.NET 网页中,服务器端(server)和客户端(client)通过 HTTP 进行通信。客户端通常是网络浏览器。

  1. 客户端向服务器发送请求。
  2. 作为响应,服务器上的 ASP.NET 代码 goes through the page life cycle 生成一个 HTML 页面。
  3. 服务器通过 HTTP 将该页面发送回客户端。
  4. 客户端呈现 HTML 并可选择使用 JavaScript 更改它。

当您的代码调用RegisterStartupScript 时,HTML 页面仍在服务器上(第 2 步)。重要的是,客户端还没有调用DislayTime() 函数!

当您的代码调用string text = Label1.Text; 时,HTML 页面仍然在服务器端。同样,客户端没有调用DisplayTime() 函数。结果:Label1 将具有其原始值。

// DisplayTime() only goes live once it reaches the client.
Page.ClientScript.RegisterStartupScript(
    GetType(), "DisplayTime", "DisplayTime();", true);

// The client-side hasn't called `DisplayTime()` yet.
string text = Label1.Text;

可能的选择

如果我们希望服务器端知道 JavaScript 操作(或任何其他客户端更改),那么我们必须使用 HTTP 将这些更改发送回服务器。这可以是 POST 或另一个 HTTP 动词。您可以回发整个页面,也可以使用AJAX。这可能超出了这个答案的范围。

【讨论】:

  • 感谢您的解释
  • @ruben 不客气。我很高兴解释为什么会这样。
猜你喜欢
  • 2015-06-14
  • 2021-07-07
  • 1970-01-01
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多