我在Stack Overflow上查看了类似的问题,但未能找到解决此特定问题的方法。我有一个简单的(不是真的,但让我假装)ASP.NET页面,里面有一个更新面板。
在此更新面板中,有一个HiddenField
控件,其值将通过我自己的自定义JavaScript设置/更新。正如我在使用Firebug在DOM中看到的那样,值已更新。
在此HiddenField
旁边有一个LinkButton
,它使用HiddenField
调用JavaScript来修改OnClientClick
的值(这是有效的)。 LinkButton
还有一个OnClick
处理程序,在修改该值后执行。
但是,在OnClick
处理程序中,我得到了HiddenField
的初始值,而不是JavaScript设置的值!
这是为什么?这是“PEBKAC”的情况吗?
编辑:使用TextBox
尝试同样的事情但没有任何成功。还尝试在提交表单之前使用Firebug手动修改值,但没有任何成功。
编辑2:我刚刚意识到在Page_Load
处理程序之前调用OnClick
,这会搞砸事情。我不会删除这个问题,因为其他人可能会遇到同样的问题,并且可能会发现这个问题很有价值。
答案 0 :(得分:1)
在我看来,好像视图状态让你开玩笑(经常)。我猜想当页面回发时,隐藏字段会使用Viewstate中包含的值进行初始化。
尝试一件事:不要直接通过yourHiddenField.Value
访问该值,但在页面的OnInit中使用Request.Forms[yourHiddenField.UniqueId]
获取它并将其强制转换为HiddenField并提取值。我不确定这是否是正确的语法。如果我没记错的话,“发布”值应该在某个地方的Request对象中。看看你是否在那里得到了价值。如果你在那里得到它,问题是在页面的OnInit事件之后映射回来的viewstate。然后我们必须为此找到解决方案......
答案 1 :(得分:0)
您必须使用AJAX更新面板提供的EndRequestHandler事件来执行此操作。
请看这个 - >
http://www.codeproject.com/KB/ajax/AfterAjaxUpdate.aspx?display=Print
答案 2 :(得分:0)
您如何在客户端上生成新输入?是否可以在服务器上执行此操作?
这样您就可以使用OnClick
代替OnClick
和OnClientClick
。