如何确定服务器端C#上的浏览器窗口大小?

MAN*_*NGA 33 .net c# asp.net

如何获得当前打开的浏览器屏幕窗口的确切高度和宽度?

Ric*_*ich 31

您可以使用Javascript来获取视口宽度和高度.然后通过隐藏的表单输入或ajax传回值.

最简单的

var width = $(window).width();
var height = $(window).height();
Run Code Online (Sandbox Code Playgroud)

使用隐藏表单输入的完整方法

假设你有:JQuery框架.

首先,添加这些隐藏的表单输入以存储宽度和高度,直到回发.

<asp:HiddenField ID="width" runat="server" />
<asp:HiddenField ID="height" runat="server" />
Run Code Online (Sandbox Code Playgroud)

接下来我们想要获得窗口(视口)的宽度和高度.JQuery有两种方法,恰当地命名为width()和height().

将以下代码添加到head元素中的.aspx文件中.

<script type="text/javascript">
$(document).ready(function() {

    $("#width").val() = $(window).width();
    $("#height").val() = $(window).height();    

});
</script>
Run Code Online (Sandbox Code Playgroud)

结果

这将导致浏览器窗口的宽度和高度在回发时可用.只需访问隐藏的表单输入,如下所示:

var TheBrowserWidth = width.Value;
var TheBrowserHeight = height.Value;
Run Code Online (Sandbox Code Playgroud)

此方法在回发时提供高度和宽度,但不在初始页面加载时提供.

关于UpdatePanels的注意事项:如果您通过UpdatePanels回发,我相信隐藏的输入需要在UpdatePanel中.

或者,您可以通过ajax调用回发值.如果您想对窗口大小调整做出反应,这非常有用.

更新jquery 3.1.1

我不得不将JavaScript更改为:

$("#width").val($(window).width());
$("#height").val($(window).height());
Run Code Online (Sandbox Code Playgroud)

  • 这可以将值输入到我的隐藏输入中,但是在Page_Load事件之后javascript会触发,这是我需要窗口高度的时候.页面是否无法知道Page_Load事件中的窗口大小? (3认同)

Ash*_*ngh 5

所以这是您将如何做。

编写一个JavaScript函数,该函数将在调整窗口大小时触发。

window.onresize = function(event) {
    var height=$(window).height();
    var width=$(window).width();
    $.ajax({
     url: "/getwindowsize.ashx",
     type: "POST",
     data : { Height: height, 
              Width:width, 
              selectedValue:selectedValue },
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: function (response) { 
           // do stuff
     }

}
Run Code Online (Sandbox Code Playgroud)

处理程序的代码背后:

 public class getwindowsize : IHttpHandler {

public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "application/json";
     string Height = context.Request.QueryString["Height"]; 
     string Width = context.Request.QueryString["Width"]; 
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果没有事件限制,这不是一个很好的解决方案。请谷歌的概念。总而言之,您每次在客户端中发生调整大小事件时都会向服务器触发AJAX调用,在Chrome和FF中,单击和拖动浏览器宽度时,每秒可能发生数十次。那就是太多的AJAX调用! (5认同)