c# - 在页面加载时从客户端获取 Javascript 值

标签 c# javascript

我正在尝试确定页面加载时的客户端窗口大小,以用于使用 C# 创建位图。通过阅读 SO 和其他地方,我知道一种方法是:

  1. 编写一个 Javascript 函数来获取相关值;
  2. 将它们存储在隐藏字段中;
  3. 使用背后的代码 (c#) 读取值,然后对其进行操作。

但是,即使我设置了<body onload...,我也会被在任何Javascript之前运行代码的执行序列所困扰。获取和设置相关值。 (见下文)

我知道我的其余代码可以工作,因为当我执行时,页面会显示单词“by”和按钮。然后,在我单击按钮并重新加载页面后,它现在可以突然读取两个隐藏值。

我的问题是,如何让我的 c# Page_Load 代码在执行其余代码之前从客户端获取这两个隐藏值,并且不需要像这样的用户操作单击按钮?

我的页面:

<body onload="getScreenSize()">
    <form id="form1" runat="server">

        <input type="hidden" name="hiddenW" ID="hiddenW" runat="server" />
        <input type="hidden" name="hiddenH" ID="hiddenH" runat="server" />
   <script>
       function getScreenSize() {
           var myW = document.getElementById("hiddenW");
           myW.value = window.innerWidth;
           var myH = document.getElementById("hiddenH");
           myH.value = window.innerHeight;
       }
   </script>
        <asp:Button ID="Button1" runat="server" Text="Button" />
    </form>
</body>

隐藏代码:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(hiddenW.Value+" by " +hiddenH.Value);
    }

}

第一次运行时(当我需要这些值时),它显示

enter image description here

点击按钮后,证明 Javascript 有效:

enter image description here

接下来的问题是,如何在运行其余的 Page_Load 代码之前获取这些值,以便我可以直接生成并显示图像?

最佳答案

在 C# Page_Load() 执行之前无法获取客户端窗口大小,因为页面是在 C# 代码执行完成后呈现给客户端的。
窗口大小可能会在页面加载期间发生变化,因此您必须在页面加载完成后才能获取窗口大小。

解决方案:
页面完全加载后,您可以使用ajax将值发送到后端。

在获得正确的值后,您可以使用 java 脚本进行回发,如下所示:
jQuery:

$(function() {
    var width = window.innerWidth ||
            document.documentElement.clientWidth ||
            document.body.clientWidth;
    var height = window.innerHeight ||
             document.documentElement.clientHeight ||
             document.body.clientHeight;
    $('#hdn_width').val(width);
    $('#hdn_height').val(height);
    $('#your_form').submit();
});

C#:

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
        if (IsPostBack)
        {
            // Use hdn_width and hdn_height here
        }
    }
    catch (Exception ex)
    {
    }
}

关于c# - 在页面加载时从客户端获取 Javascript 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21987587/

相关文章:

c# - 如何在 VB 代码中调用 C# 扩展方法

javascript - 模态弹出窗口在桌面上打开视频,但在触摸屏设备上打开应用程序

javascript - 无法将脚本放入 jQuery 中

HTML 中的 JavaScript 不执行

c# - 当我将文本框的此属性初始化为 false 时,属性 setenabled 保持 false

c# - 尝试通过应用而非 Management Studio 连接时登录失败

c# - 在 C# 中使用 ConcurrentStack 时出现奇怪的异常

c# - PCAP 库功能(编写新的 PCAP 文件)

javascript - 使用新查询参数执行完整路由转换时,Ember TransitionAborted

javascript - 在我的网站上使用 Node.js 匹配用户