关于ViewState的问题 <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="之后有一大串乱码

优化ViewState提升Web性能
本文探讨了ViewState在ASP.NET Web应用程序中的作用及如何通过禁用或优化ViewState来减少页面大小,进而提高网络访问速度。

在顶部中加入 EnableViewState="false" ,就可以去掉了,前提是你用不到它

 

先去开会,分析回来再写

------------------------------------------------

 

 

昨天开完会回来就下班了,今天补上

 

昨天写程序的时候由于在GridView_RowDataBound写了几个循环,编译好查看了一下html源文件

 

不看不知道啊,网页下载下来后有3M多大,用记事本直接打不开,记事本打开3m的文本。。。。。。。。。

 

后来简化了一下GridView_RowDataBound的循环结构,结果最小还是将近700多K,而且<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value=".......之后的乱码将近是150多k

 

也就是说,要想达到我要求的效果,其中ViewState的代码大概是2.5M左右...........

 

网上查了下,有一种解决办法是在顶部中加入 EnableViewState="false" ,就可以去掉了,也就是关闭视图状态,但是会存在一定问题,就是代码响应的问题,

 

viewstate,字面上讲就是视图状态,也就是页面上的那些控件的状态,例如值是什么,是选中还是没选中,就是由这些viewstate来保存的。由于http是没有状态的协议,而.net要实现一中模拟的持续状态,就采用了这种方式

 

比如 在Button1_Click事件中,编写代码:

ListBox.Items.Add(”客户端点击按钮一次!”);

此时运行该应用程序,单击网页上的按钮,在ListBox中会添加内容,不断地单击,内容则不断添加。如果我们将ListBox的EnableViewState属性改为false时,不断单击按钮,则只能添加一次。

这样有什么好处呢?如果我们在开发Web应用程序时,某些控件是不需要接受用户的操作或只需要接受一次操作的时候,我们可以将这些控件的EnableViewState属性改为false,这样可以优化我们的程序,提高网络访问的速度。

比如新闻网站的前台,不需要什么交互,这样你就可以把视图状态给禁用了

 

如果既想打开视图,而又担心ViewState的代码过多,就可以使用下面的方法,在页面中加入如下代码

 

 

 

    
using System.IO;
using System.Threading;
 
#region 解决ViewState过于庞大的问题
    //由于这里添加了目录,所以要建立App_Data/ViewState目录.         
    protected override object LoadPageStateFromPersistenceMedium()
    {
        string viewStateID = (string)((Pair)base.LoadPageStateFromPersistenceMedium()).Second;
        string stateStr = (string)Cache[viewStateID];
        if (stateStr == null)
        {
            string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
            stateStr = File.ReadAllText(fn);
        }
        return new ObjectStateFormatter().Deserialize(stateStr);
    }

    protected override void SavePageStateToPersistenceMedium(object state)
    {
        string value = new ObjectStateFormatter().Serialize(state);
        string viewStateID = (DateTime.Now.Ticks + (long)this.GetHashCode()).ToString(); //产生离散的id号码   
        string fn = Path.Combine(this.Request.PhysicalApplicationPath, @"App_Data/ViewState/" + viewStateID);
        //ThreadPool.QueueUserWorkItem(File.WriteAllText(fn, value));          
        File.WriteAllText(fn, value);
        Cache.Insert(viewStateID, value);
        base.SavePageStateToPersistenceMedium(viewStateID);
    }

    #endregion


当然要在App_Data下建立ViewState文件夹,这样只会产生“<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPBRI2MzQ4ODQ4NTc5NDY2NzE3ODFkyU95B+ulMWCLzjLeRYst9DMKWoE=" />”这些代码

原理就是使用了缓存,将ViewState持久化保持在服务器端的代码,这样ViewState不占用网络带宽,因此其存取只是服务器的磁盘读取时间。并且它很小,可以说是磁盘随便转一圈就能同时读取好多ViewState,因此可以说“不占时间”。为了再“不占磁盘时间”,还使用了缓存。

 

参考资料如下:

http://zhidao.baidu.com/question/147398216.html

http://www.cnblogs.com/wayfarer/archive/2004/04/25/7574.aspx

http://www.fyyy.org/bencandy.php?fid-4-id-112-page-1.htm

http://bbs.youkuaiyun.com/topics/270013573

http://bbs.youkuaiyun.com/topics/230052606

 

 

 

 

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> <html> <head id="Head1"> <title> 领丰集团--MES </title> <link href="Inc/Css/login/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> <link href="Inc/Css/login/css/ace.min.css" rel="stylesheet" type="text/css" /> <link href="Inc/Css/login/css/ace-rtl.min.css" rel="stylesheet" type="text/css" /> <link href="Inc/Css/login/css/icon.css" rel="stylesheet" type="text/css" /> <!--[if lte IE 8]> <link rel="stylesheet" type="text/css" href="Inc/Css/login/css/ace-ie.min.css" /> <![endif]--> <script src="Inc/Js/Plugs/jQuery/jquery.min.js" type="text/javascript"></script> <script src="Inc/Js/Plugs/jquery/jquery.cookie.js" type="text/javascript"></script> <script type="text/javascript" src="Inc/Js/LoginService.js"></script> <script type="text/javascript"> //如果为移动设备自动转址到设动版 $(document).ready(function () { //return; var href = window.location.href; var v_loginame = $.cookie("loginame"); //若存在用户名cookie if (v_loginame) { $("#uid").val(v_loginame); $("#uid").focus(); //接收从main页面返回的error =1错误信息,并弹出! if (href.indexOf("error=1") != -1)at $("#errormsg").html("请求已超时,请重新登入MES系统!"); } else $("#uid").focus(); //键盘确认时进行登陆验证 document.onkeydown = function (e) { var ev = window.event || e; if (ev.keyCode == 13) { CheckLogin(); } }; $("#btnPassword").click(GetPassword); $("#resetpassword").click(ResetPassword); }); window.onload = function () { var href = window.location.href; var uid, pwd; //SSO转向JXC登录验证 if (href.indexOf("UID=") > -1 && href.indexOf("PWD=") > -1) { uid = AccountLogin.Base64ToString(href.split("UID=")[1].split("&")[0]).value; pwd = AccountLogin.Base64ToString(href.split("PWD=")[1].split("&")[0]).value; $("#uid").val(uid); //验证是否有动态密码验证 CheckType(); $("#pwd").val(pwd); CheckLogin(); } }; //验证账号或口令卡 function CheckLogin() { var loginame, pwd, dypasswd, ret, p_issso, p_isdpt, p_isOpenDpt, p_isUseOpt; loginame = $("#uid").val(); if (loginame.length == 0) { $("#accounterror").html("账号不能为空!"); return; } pwd = $("#pwd").val(); if (pwd.length == 0) { $("#passworderror").html("密码不能为空"); return; } //取得sso的验证开关 p_issso = AccountLogin.GetConfigSet("IsSSOValid").value; if (p_issso != "0") { dypasswd = $("#dypasswd").val(); p_isUseOpt = AccountLogin.IsValidOtp(loginame).value; if (p_isUseOpt.split(',')[0] == "Y" && dypasswd.length == 0) { $("#passworderror").html("账号:" + loginame + "已启用动态密码验证,动态密码不能为空!"); return; } ret = AccountLogin.CheckSSOLogin(loginame, pwd, dypasswd).value; var key = ret.split(","); if (key[0] == "Y") { checkBILogin(p_issso); } else { //口令与密码验证不通过时 $("#dypasswd").val(""); if (key.length > 0) { $("#pwd").val("").focus(); alert(key[1]); } return; } } else { checkBILogin(p_issso); } } function onloadUI() { var wh = ($(window).width() - 725) / 2; $("#loginbanner").animate({ left: wh }, 0); $("#downdiv").animate({ left: 55 }, 0); $("#person").animate({ left: wh }, 0); window.setTimeout("LoadPanner()", 100); // showNote(); } function LoadPanner() { var wh = ($(window).width() + 100) / 2; $("#loginpanner").animate({ left: wh }, 0); } function CancelLogin() { $("#uid").val("").focus(); $("#pwd").val(""); } function ResetLogin(p_button) { if (p_button.reset) { p_button.reset.style.display = "block"; } else { var v_div = document.createElement('div'); p_button.parentNode.appendChild(v_div); p_button.reset = v_div; v_div.style.position = "absolute"; v_div.style.top = p_button.offsetTop + p_button.offsetHeight + "px"; v_div.style.left = "0px"; v_div.style.width = "100%"; v_div.style.height = "90px"; v_div.style.paddingTop = "3px"; var v_iframe = document.createElement('iframe'); v_div.appendChild(v_iframe); v_iframe.src = "Reset.aspx"; v_iframe.style.width = "100%"; v_iframe.style.height = "100%"; v_iframe.style.border = "solid 1px #90D1F1"; v_iframe.style.overflow = "hidden"; } p_button.blur(); } function Printhelp() { var url = " http://" + document.URL.split('/')[2] + "/sso/Inc/help/printhelp.doc"; window.location.href = url; } //用户验证方式检测 function CheckType() { var loginame = $("#uid").val(); if (loginame == "") { //初始化 retset(); return; } var p_isdpt = AccountLogin.GetConfigSet("IsDPWValid").value; //开启动态口令卡验证 if (p_isdpt == "1") { ret = AccountLogin.IsValidOtp(loginame).value; if (ret.split(',')[0] == "Y") { $("#dypasswd,#dyptext").show(); } else $("#dypasswd,#dyptext").hide(); } loadFact(loginame); } function loadFact(loginame) { $("#factno").empty(); $("#errormsg").html(""); var fxml = AccountLogin.GetFactList(loginame).value; if (fxml.replace("<NewDataSet />", "").length == 0) { $("#errormsg").html("请选择登陆厂别!"); return; } var option = ""; if ($.browser.msie) { var XMLDom = new ActiveXObject("Microsoft.XMLDOM"); XMLDom.loadXML(fxml); } else XMLDom = fxml; $(XMLDom).find("Data").each(function () { option += "<option value='" + $(this).find('FACTNO').text().trim() + "'>" + $(this).find('FACTNAME').text() + "</option>"; }); $("#factno").append(option); $("#factno").find("option[0]").attr("selected", true); } function retset() { $("#uid").val("").focus(); $("#pwd").val(""); $("#dypswd,#dypswdvalue").hide(); } function show_box(id) { $('.widget-box.visible').removeClass('visible'); $('#' + id).addClass('visible'); } function GetPassword() { var email = $("#useremail").val(); var type = "false"; if ($.trim(email).length > 0) { if (isEmail(email)) { type = "true"; } $.ajax({ type: "POST", async: false, dataType: "text", cache: false, url: "UI/Handler.ashx", data: { MothodName: "Email", p_email: email, p_type: type }, contentType: "application/x-www-form-urlencoded", error: function (xhr, ajaxOptions, thrownError) { window.document.write(xhr.responseText + thrownError); }, success: function (res) { alert(res); } }); } else alert("请输入账号或邮件地址!"); } function isEmail(str) { var reg = /^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/; return reg.test(str); } function ResetPassword() { var r_message = ""; var v_old = document.getElementById('old'), v_new = document.getElementById('new'); if (v_old.value == "" || v_new.value == "") { alert("输入密码不能为空值!"); return; } if (v_old.value != v_new.value) { alert("输入密码不一致!"); return; } $.ajax({ type: "POST", async: false, dataType: "text", cache: false, url: "UI/Handler.ashx", data: { MothodName: "Update", p_hash: request["hash"], p_pwd: v_old.value }, contentType: "application/x-www-form-urlencoded", error: function (xhr, ajaxOptions, thrownError) { window.document.write(xhr.responseText + thrownError); }, success: function (res) { r_message = res; } }); if (r_message) { alert("密码重置成功!"); window.location.assign("Login.aspx"); } else { alert("密码重置失败,请联通络系统维护人员!"); } } function CheckOS() { var x = navigator.userAgent.match(/x86_64|Win64|WOW64/) || navigator.cpuClass === '64' ? '64' : '32'; if (x == "64") { $("#printDownload").html('[ <a name="Alang" id="A1" href="/lfxj/slPrint_x64V2.1_aliyun.zip">报表列印控件下载</a> ]'); $("#ExplorerDownload").html('[ <a name="Alang" id="A1" href="/lfxj/chrome64.exe">浏览器下载</a> ]'); } else { $("#printDownload").html('[ <a name="Alang" id="A2" href="/lfxj/slPrint_x86V2.1_aliyun.rar">报表列印控件下载</a> ]'); $("#ExplorerDownload").html('[ <a name="Alang" id="A2" href="/lfxj/chrome32.exe">浏览器下载</a> ]'); } } </script> <style type="text/css"> .login-layout { background: url('Inc/Css/login/css/img/bg/bg-05.jpg') #f3f3f3; } .login-container { width: 500px; margin: 0px auto; margin-top: 2%; } .login-layout .widget-box { visibility: hidden; position: absolute; overflow: hidden; width: 100%; border-bottom: 0px; box-shadow: none; padding: 6px; background-color: #fff; -webkit-transform: scale(0, 1) translate(-150px); } .error { color: Red; } </style> </head> <body class="login-layout" onload="CheckOS()"> <form name="form2" method="post" action="./login.aspx?ReturnUrl=%2flfxj%2fMain.aspx%3fuid%3dlfit002%26pwd%3d251289&error=1" id="form2"> <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MzM0MzM0MDBkZOHjsIIU57s89WK6gN8Mco90VTSSMfOvi5xlFACzUNlb" /> <script type="text/javascript" src="/lfxj/ajaxpro/prototype.ashx"></script> <script type="text/javascript" src="/lfxj/ajaxpro/core.ashx"></script> <script type="text/javascript" src="/lfxj/ajaxpro/converter.ashx"></script> <script type="text/javascript" src="/lfxj/ajaxpro/AccountLogin,App_Web_cbhnaljf.ashx"></script> <input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="EEDA5EB3" /> <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAIxWz1UdzUxzn5dgMn23JQTWSBi3t7AiBe0pTmtLU9og20iuEUbb0xsJDsF2zq1w8jftRNcTcPUX+wGarsyFFCf" /> <div class="login-container"> <div class="center"> <h1> <i class="icon-leaf green"></i><span class="red">LFMES</span> <span class="white">领丰电子--MES</span> </h1> <h4 class="blue"> © LinFeng CO.LTD</h4> </div> <div class="space-6"> </div> <div class="position-relative"> <div id="login-box" class="login-box visible widget-box no-border"> <div class="widget-body"> <div class="widget-main"> <h4 class="header blue lighter bigger"> <i class="icon-coffee green"></i>请输入您的账号密码 </h4> <fieldset> <label class="block clearfix"> <span class="block input-icon input-icon-right">账号: <input type="text" id="uid" class="form-control" onblur="CheckType();" value="xctest" /> <i class="icon-user"></i></span> </label> <label class="block clearfix"> <span class="block input-icon input-icon-right">密码: <input type="password" id="pwd" class="form-control" value="" /> <i class="icon-lock"></i></span> </label> <label class="block clearfix" > <span class="block input-icon input-icon-right">公司: <select id="factno" class="form-control"> </select> </span> <span class="block input-icon input-icon-right" style="display:none"> <input type="radio" name="profact_mk" checked value="1" style="display:none"/> </span> <span id="errormsg" class="error"></span> </label> <label class="block clearfix" style="display:none"> <span class="block input-icon input-icon-right" id="dypwd"> <label id="dyptext" style="display: none"> 动态密码:</label> <input type="password" id="dypasswd" style="display: none" class="form-control" value="" /> <i class="icon-lock"></i></span> </label> <div class="clearfix"> <div id="div_lang"> <label><input type="radio" name="lang" checked="checked" value="zh"/><font color="red"> [ 中文 ]</font></label>   <p class="divDownload"> <span id="ExplorerDownload"></span> </p> <p class="divDownload"> <span id="printDownload"></span> </p> </div> <input name="Login" type="button" id="Login" class="width-35 pull-right btn btn-sm btn-primary" value="登入" onclick="CheckLogin()" /> </div> <div class="space-4"> </div> </fieldset> </div> <div class="toolbar clearfix"> </div> </div> </div> <div id="forgot-box" class="forgot-box widget-box no-border"> <div class="widget-body"> <div class="widget-main"> <h4 class="header red lighter bigger"> <i class="icon-key"></i>取回密码 </h4> <div class="space-6"> </div> <fieldset> <label class="block clearfix"> <span class="block input-icon input-icon-right">请输入账号或Email: <input id="useremail" class="form-control" /> <i class="icon-envelope"></i></span> </label> <div class="clearfix"> <button type="button" id="btnPassword" class="width-35 pull-right btn btn-sm btn-danger"> <i class="icon-lightbulb"></i>发 送 </button> </div> </fieldset> </div> <div class="toolbar center"> <a href="#" onclick="show_box('login-box'); return false;" class="back-to-login-link"> 返回登录 <i class="icon-arrow-right"></i></a> </div> </div> </div> <div id="signup-box" class="signup-box widget-box no-border"> <div class="widget-body"> <div class="widget-main"> <h4 class="header green lighter bigger"> <i class="icon-group blue"></i>新用户注册 </h4> <div class="space-6"> </div> <fieldset> <label class="block clearfix"> <span class="block input-icon input-icon-right">账号: <input type="email" class="form-control" /> <i class="icon-envelope"></i></span> </label> <label class="block clearfix"> <span class="block input-icon input-icon-right">邮箱: <input type="email" class="form-control" /> <i class="icon-envelope"></i></span> </label> <label class="block clearfix"> <span class="block input-icon input-icon-right">姓名: <input type="text" class="form-control" /> <i class="icon-user"></i></span> </label> <label class="block clearfix"> <span class="block input-icon input-icon-right">密码: <input type="password" class="form-control" /> <i class="icon-lock"></i></span> </label> <label class="block clearfix"> <span class="block input-icon input-icon-right">请重新输入一次密码: <input type="password" class="form-control" /> <i class="icon-retweet"></i></span> </label> <div class="space-24"> </div> <div class="clearfix"> <button type="reset" class="width-30 pull-left btn btn-sm"> <i class="icon-refresh"></i>重置 </button> </div> </fieldset> </div> <div class="toolbar center"> <a href="#" onclick="show_box('login-box'); return false;" class="back-to-login-link"> <i class="icon-arrow-left"></i>返回登录</a> </div> </div> </div> <div id="reset-box" class="forgot-box widget-box no-border"> <div class="widget-body"> <div class="widget-main"> <h4 class="header red lighter bigger"> <i class="icon-key"></i>重置密码 </h4> <div class="space-6"> </div> <fieldset> <label class="block clearfix"> <span class="block input-icon input-icon-right">新密码: <input id="old" class="form-control" type="password" /> <i class="icon-envelope"></i></span> </label> <label class="block clearfix"> <span class="block input-icon input-icon-right">确认密码: <input id="new" class="form-control" type="password" /> <i class="icon-envelope"></i></span> </label> <div class="clearfix"> <button type="button" id="resetpassword" class="width-35 pull-right btn btn-sm btn-danger"> <i class="icon-lightbulb"></i>确 定 </button> </div> </fieldset> </div> <div class="toolbar center"> <a href="#" onclick="show_box('login-box'); return false;" class="back-to-login-link"> 返回登录 <i class="icon-arrow-right"></i></a> </div> </div> </div> </div> </div> </form> </body> </html> <!--[if IE 6]> <script type="text/javascript"> DownIE8(); </script> <![endif]-->我打算用postman做接口测试,帮我找出这个网页得接口
最新发布
09-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值