我有这样的代码
<table>
<tr>
<td>
<div>
<asp:Label runat="server" ID="lblBookmarksIds" Style="visibility: hidden;" Text="test"/>
</div>
</td>
<td>
<asp:UpdatePanel runat="server" ID="buttonPanel" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button runat="server" ID="btnInvokeImageRead" CausesValidation="false" UseSubmitBehavior="false"
OnClick="btnInvokeImageRead_Click" Style="visibility: hidden;" />
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
在javascript中我试图设置label的值并调用codebehind函数,以便我将所需的值传递给代码隐藏:
alert(document.getElementById('<%= lblBookmarksIds.ClientID%>').firstChild.nodeValue);
document.getElementById('<%= lblBookmarksIds.ClientID%>').innerText = str;
alert(document.getElementById('<%= lblBookmarksIds.ClientID%>').firstChild.nodeValue);
//alert('1');
if (str != "") {
document.getElementById('<%= btnInvokeImageRead.ClientID%>').click();
}
当显示第二个警报时,lblBookmarksIds的值已更改值,但是当我在codebehind函数中调试btnInvokeImageRead_Click时,lblBookmarksIds的值具有其旧值。
有人知道为什么吗?
此致 沃伊切赫
答案 0 :(得分:0)
标签不会传递给代码。您必须为此目的使用输入(TextBox)。
您可以使用CSS将输入设置为看起来像标签。
或者,您可以将值保留在隐藏字段中,并使用javascript显示标签中的值并将其传回隐藏字段中。
答案 1 :(得分:0)
ASP.NET能够“看到”输入TextBox
和类似控件的值的原因是,当页面回发时,这些控件的值将在POST
正文中发送。您可以通过任意数量的工具看到这一点,包括您的浏览器可能包含的开发人员工具或像Fiddler这样的拦截代理。发生回发时,每个控件都有一个LoadPostData
函数,用于处理POST
数据并更新控件的Text
属性(或任何属性)。
Label
数据中未提交POST
的内容,因此.NET无法查看JavaScript对其所做的任何更改。
处理发布数据的控件都实现了IPostBackDataHandler
。