抓取在asp.net代码后面的document.ready中设置的隐藏字段的值

时间:2014-11-14 16:10:34

标签: javascript c# jquery asp.net

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

谢谢!

2 个答案:

答案 0 :(得分:0)

是的,这是不可能的。

(至少在此时已知技术。你需要一台时间机器才能获得这些数据。)

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

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

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

答案 1 :(得分:0)

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

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>