代码之家  ›  专栏  ›  技术社区  ›  Roland

要用于分配给Asp.Net HiddenField的加载事件

  •  0
  • Roland  · 技术社区  · 6 年前

    我需要从localStorage获取一个值(ClientId)以隐藏代码。这对于使用前一个会话中的“客户端”设置登录非常方便,该设置存储在:

    C#:

    string script = string.Format("localStorage.clientId = '{0}';", _MySession.CurrentClientId);
    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", script, true);
    

    (见: this SO question )

    要将数据从本地存储区返回到代码隐藏区 asp.HiddenField 元素似乎是这样做的:元素可以很容易地用JavaScript编写,并且可以从后面的代码中读取:

    HTML格式:

    <asp:HiddenField ID="hf_ClientId" runat="server" />
    

    JS公司:

    document.getElementById("<%=hf_ClientId.ClientID%>").value = localStorage.clientId;
    

    代码隐藏,C#(在母版页中):

    var v = hf_ClientId.Value;
    

    但是,后面的代码在页面加载中,并运行 之前 html被构造,JS在$(document.ready)中运行,因此没有收到任何值。

    然后我试着把JS移到 theForm.onsubmit 就像一个钩子一样 __doPostBack . 使用Firefox F12调试器和VisualStudio C#调试器,我通过单击窗体上的某个按钮,验证了只要回发发生,JS就在C#之前被调用,但仍然没有收到任何值。

    我做错了什么?怎么解决?

    3 回复  |  直到 6 年前
        1
  •  2
  •   Roland    6 年前

    阅读 this SO question 我尝试了一个更简单的隐藏字段:

    HTML格式:

    <input type="hidden" id="hf_ClientId" name="hf_ClientId" />
    

    C#:

    if (IsPostBack)
      string StoredClientId = Request.Form["hf_ClientId"];
    

    Javascript也更简单,因为runat=server属性已经消失:

    JS公司:

    document.getElementById("hf_ClientId").value = localStorage.clientId;
    

    或者,使用jQuery(未测试,val语法可能错误):

    $('#hf_ClientId').val(localStorage.clientId);
    

    这有效,现在有数据了。

    另外,C部分可以位于母版页(隐藏字段所在的位置)或主页面中。只需添加一条评论,因为这是一种意大利面条。

    因为,对我来说,这是一个登录页面,这个C#代码在login按钮的回调中,所以它总是一个回发。很简单!

        2
  •  1
  •   Poul Bak    6 年前

    我想,您正在调试第一个(初始)请求。这里没有设置HiddenField。 要查看HiddenField值,必须在将代码发送到服务器后对其进行调试。 尝试在加载事件中添加签入:

        if (Page.IsPostBack)
    {
        //Here you can read your hidden field
    }
    
        3
  •  0
  •   ADyson    6 年前

    尝试将文档添加到codebhind javascript调用

    Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "key", "$(document).ready(function(){'" + script + "'}", true);