我想使用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;
}
答案 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;