问:document.getElementById("Label1").innerText="ffff";为Label1赋值,当点击按钮取不出Label1的值。如string aa=this.Label1.Text;经检查为空字符串。但如果把控件换成TextBox控件就可以取到,请问这是为什么?
答1:Label 在 客户端的赋值,不被记入 ViewState, 在 SERVER 端是取不到改变的值的。
答2:上面的回答正确,label在客户端会变成<span>,他在客户端的赋值不会保存到viewstate。客户端赋完值,点击按钮将页面提交到服务器端,服务器端根据控件的ID到viewstate中找其在客户端的赋值,此时找不到label在客户端的赋值,因为提交页面时没有保存,而textbox在客户端变成<input type='text'..,的形式,这种控件客户端赋值是被保存到viewstate和页面一起提交的,所以能在服务器端取到值,不知道你现在明白了没有。你这种情况建议你这样解决:在label1旁边放一个textbox或者<input type='text'>将其runat='server'样式设为隐藏,或者干脆放一<input type='hidden'>的隐藏框,在客户端给label1赋值时,同时也给旁边的文本框赋值,这样,label和文本框的值就可以同步了,然后你在服务器端直接取文本框的值就可以了。
说明:js是在客户端执行的,像img这些也跟label一样的情况。
答1:Label 在 客户端的赋值,不被记入 ViewState, 在 SERVER 端是取不到改变的值的。
答2:上面的回答正确,label在客户端会变成<span>,他在客户端的赋值不会保存到viewstate。客户端赋完值,点击按钮将页面提交到服务器端,服务器端根据控件的ID到viewstate中找其在客户端的赋值,此时找不到label在客户端的赋值,因为提交页面时没有保存,而textbox在客户端变成<input type='text'..,的形式,这种控件客户端赋值是被保存到viewstate和页面一起提交的,所以能在服务器端取到值,不知道你现在明白了没有。你这种情况建议你这样解决:在label1旁边放一个textbox或者<input type='text'>将其runat='server'样式设为隐藏,或者干脆放一<input type='hidden'>的隐藏框,在客户端给label1赋值时,同时也给旁边的文本框赋值,这样,label和文本框的值就可以同步了,然后你在服务器端直接取文本框的值就可以了。
说明:js是在客户端执行的,像img这些也跟label一样的情况。