【问题标题】:ASP.NET: JavaScript modifying the value of a HiddenField before submittingASP.NET:JavaScript 在提交之前修改 HiddenField 的值
【发布时间】:2009-09-17 12:25:16
【问题描述】:

我在 Stack Overflow 上查看过类似的问题,但无法找到解决这个特定问题的方法。我有一个简单的(不是真的,但我们假装)ASP.NET 页面,里面有一个更新面板。

在这个更新面板中有一个 HiddenField 控件,其值将通过我自己的自定义 JavaScript 设置/更新。正如我使用 Firebug 在 DOM 中看到的那样,值 is 已更新。

在这个HiddenField 旁边有一个LinkButton,它调用JavaScript 来使用OnClientClick 修改HiddenField 的值(这个工作)。 LinkButton 也有一个 OnClick 处理程序,它在值被修改后执行。

但是,在 OnClick 处理程序中,我得到了 HiddenField 的初始值,而不是 JavaScript 设置的值!

这是为什么?这是“PEBKAC”的情况吗?

编辑:TextBox 尝试了同样的事情,但没有成功。还尝试在提交表单之前使用 Firebug 手动修改值,但没有任何成功。

编辑 2: 我刚刚意识到 Page_LoadOnClick 处理程序之前被调用,这把事情搞砸了。我不会删除这个问题,因为其他人可能有同样的问题,并且可能会觉得这个问题很有价值。

【问题讨论】:

  • 也许一些代码可以帮助我们深入了解这个问题。我已经做了一些测试,我可以使用“OnClientClick”设置隐藏字段的值,然后在服务器上的“OnClick”事件处理程序中检索它。
  • 我发现我的代码存在问题并更新了问题以表明这一点。

标签: asp.net javascript viewstate hidden-field


【解决方案1】:

这在我看来好像视图状态让你成为一个糟糕的笑话(经常)。我的猜测是,当页面回发时,隐藏字段会使用 Viewstate 中包含的值进行初始化。

尝试一件事:不要直接通过 yourHiddenField.Value 访问值,而是在页面的 OnInit 中使用 Request.Forms[yourHiddenField.UniqueId] 获取它并将其转换为 HiddenField 并提取值。我不确定这是否是正确的语法。如果我没记错的话,“发布的”值应该在 Request 对象中的某个地方。看看你是否在那里得到了价值。如果你得到它,问题是在页面的 OnInit 事件之后映射回来的视图状态。然后我们必须找到解决方案......

【讨论】:

    【解决方案2】:

    您必须使用 AJAX 更新面板提供的 EndRequestHandler 事件来完成。

    请看这个-->

    http://www.codeproject.com/KB/ajax/AfterAjaxUpdate.aspx?display=Print

    【讨论】:

    • 这似乎是在处理 AJAX 请求之后发生的事情,而我只希望我的 OnClick 处理程序能够访问新值。
    • 您必须考虑 AJAX,因为您的控件位于更新面板内。
    【解决方案3】:

    您如何在客户端生成新输入?是否可以在服务器上执行此操作?

    这样您就可以只使用OnClick 而不是OnClickOnClientClick

    【讨论】:

    • 无法在服务器上生成新的输入。
    猜你喜欢
    • 2020-04-29
    • 1970-01-01
    • 2011-02-03
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多