在 document.ready 中获取隐藏字段的值,asp.net 代码隐藏

本文关键字:隐藏 asp 代码 net 字段 document ready 获取 | 更新日期: 2023-09-27 18:30:29

我需要在代码隐藏中访问隐藏字段值,通常这很容易,但是这个变量是在jQuery的document.ready事件期间设置的,我需要在页面加载时访问它...到目前为止,我已经尝试了Page_Load,Page_LoadComplete,Init和Prerender,但没有运气。这只是一项不可能完成的任务吗?

谢谢!

在 document.ready 中获取隐藏字段的值,asp.net 代码隐藏

是的,这是不可能的。

(至少在这一点上是已知的技术。你需要一台时间机器来获取这些数据。

服务器上的所有代码都运行以创建到浏览器的页面。 服务器代码完成后,页面将发送到浏览器,浏览器将解析页面。分析整个页面时,将发生ready事件。

因此,所有服务器代码在页面发送到浏览器之前运行,所有 Javascript 代码在页面发送到浏览器之后运行。

(从技术上讲,在服务器代码完成之前让 Javascript 在浏览器中启动是可能的,但这意味着您需要关闭服务器上响应的缓冲并完全自己处理响应(即不是 Webforms 或 MVC),并且 Javascript 需要在页面开始加载时运行,而不是在ready事件中运行。此外,您需要服务器上的另一个页面,Javascript 可以请求该页面将数据发送回服务器,并且该页面必须无会话运行,以便 Web 服务器可以与当前页面并行处理它。此外,您需要在可以存储数据的服务器上设置一些静态类,以便当前页面可以在到达时拾取它,并且您必须为 Javascript 可以发回的请求创建某种标识符,以确定哪个请求应该获取数据, 因为用于发送数据的页面是无会话的。因此,即使可以做一些类似于你想要的事情,它也太复杂了,不切实际。

所以上面的海报是正确的,但是有很多方法可以做你想做的事。 例如,在更改值后立即提交回发。 如下所示(还有许多其他替代方案)。

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var test = HiddenField1.Value;
            if (test != "")
                HiddenField1.Value = "test finished";
        }
    }
<form id="form1" runat="server">
        <asp:HiddenField ID="HiddenField1" runat="server" />
        <script type="text/javascript">
            $(document).ready(function () {

                if ($('#HiddenField1').val() !== 'test finished') {
                    $('#HiddenField1').val('test');
                    $("#form1").submit();
                }
            });
        </script>
    </form>