ASP.NET:JavaScript在提交之前修改HiddenField的值

时间:2009-09-17 12:25:16

标签: asp.net javascript viewstate hidden-field

我在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,这会搞砸事情。我不会删除这个问题,因为其他人可能会遇到同样的问题,并且可能会发现这个问题很有价值。

3 个答案:

答案 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代替OnClickOnClientClick