2015-05-08 66 views
1

改变之后的标签我有这个JavaScript函数:无法从ASP获得Text属性:使用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> 

在代码隐藏我这样做:

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

的DisplayTime()函数工作正常。

我运行浏览器时显示的Label1文本是: 2015-21-08 17:21:36 < - 这很好。

但是,当我尝试读取从代码隐藏的Label1文本属性我得到的原始文本值: “LabelText的”

有谁有一个想法,为什么?

问候 rubenc

+2

asp的标签标签使用所谓的文本来构建一个HTML标签标记的innerHTML属性。 Javascript正在设置由asp创建的html标签元素的innerHTML,但没有直接访问asp对象。您的CodeBehind从asp标签获取属性Text。 (服务器端客户端逻辑分离) – user2782001

+0

您应该使用隐藏的控件而不是标签,是user2782001忘记说的内容。另外http://stackoverflow.com/questions/274826/how-to-get-client-date-and-time-in-asp-net – misha130

+0

感谢所有您的回复 – ruben

回答

1

有谁有一个想法,为什么?

简答

string text = Label1.Text;语句运行在服务器端。 DisplayTime()函数在客户端运行。由于服务器端代码之前运行的客户端代码呢,服务器不知道什么样的变化DisplayTime()将会使。您需要将更改发送回服务器。

另外说明

在ASP.NET网页,服务器侧(服务器)和客户端(客户端)通过HTTP通信。客户端通常是一个Web浏览器。

  1. 客户端发送到服务器的请求。
  2. 在响应,服务器goes through the page life cycle上ASP.NET代码来生成一个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。这可能超出了这个答案的范围。

+1

感谢您的解释 – ruben

+0

@ruben你是欢迎。我很高兴解释它为什么会发生。 –

0

我发现这里的解决方案: Retrieve Client's Today's Date using ASP.NET

+0

很酷。在你的链接中,有一点是JavaScript所说的:'//重新加载页面,以便服务器获取cookie值并计算客户端的时间。这当然是将更改发送回服务器的原因。 –