无法在服务器端访问页面加载事件的值

时间:2014-09-25 02:09:04

标签: asp.net pageload hidden-field

我想使用hiddenField来获取监视器的宽度和长度值。

但只有在我点击按钮后才能工作,我可以访问hfClientScreenHeight.Value和hfclientScreenWidth.Value。否则,我得到null。

输入值似乎在服务器端很好。我如何解决这个问题?谢谢!

<asp:Content ID="Content1" ContentPlaceHolderID="cph_Head" Runat="Server">
<script type="text/javascript" language="javascript">
    function GetResolution() {
        document.getElementById("clientScreenWidth").value = screen.width;
        document.getElementById("clientScreenHeight").value = screen.height;
        document.getElementById("cph_Body_hfClientScreenHeight").value = screen.height;
        document.getElementById("cph_Body_hfClientScreenWidth").value = screen.weight;
    }
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="cph_Body" Runat="Server">
    <body onload="GetResolution();">
    <asp:HiddenField ID="hfClientScreenHeight" runat="server" />
    <asp:HiddenField ID="hfclientScreenWidth" runat="server" />
    <asp:Button ID="test" Width="50" runat="server"/>
    <input type="text"  name="clientScreenHeight" id="clientScreenHeight" />
    <input type="text"  name="clientScreenWidth" id="clientScreenWidth" />
</asp:Content>

aspx.cs

protected void Page_Load(object sender, EventArgs e)
{
    var hh = hfClientScreenHeight.Value;
    var ww = hfclientScreenWidth.Value;
}

1 个答案:

答案 0 :(得分:1)

应该是这样的。代码隐藏无法访问它们,因为它只是将它们提供给客户端。您必须通过回发将数据发送回页面,以便页面实际获取它。您必须将此数据发送回服务器。关于这一点有很多主题。您可以尝试通过ajax调用,但这不会为您获取页面的任何内容,因为您必须使用静态调用的Web服务。您也可以使用更新面板。

我在http://techbrij.com/browser-height-width-server-responsive-design-asp-net找到了一篇文章,其中可能有一个有趣的解决方案。

不要依赖于此。使用响应式设计框架来帮助处理浏览器上的不同视口大小要好得多。获得宽度和高度需要花费更多的工作,特别是尝试在所有设备上进行操作,并且响应式框架为您提供了更多选择。有一个大屏幕,然后可以显示页面的特定部分,另一个隐藏。同样适用于小屏幕,以有利于屏幕的方式显示内容并隐藏更大视口的版本。

提示:不要在脚本中硬编码服务器控件的客户端ID。它使它变得脆弱,因为只要你移动该控件,客户端ID就会改变(或者如果你将页面放在母版页中等等)。相反,只需使用response.write简写来获取唯一的客户端ID,如下所示:

document.getElementById("<%= hfClientScreenWidth.ClientID %>").value = screen.weight;