asp.net產生靜態後冗餘代碼,去掉viewstate產生的程式碼

來源:互聯網
上載者:User

看著自己網站編譯之後的源檔案,裡面很多亂七八糟的東西,看了就覺得不舒服 複製代碼 代碼如下:<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE3NjgxMzM0MDIPZBYCZg9kFgIC……

還有form源檔案,一看就知道是asp.net的頁面 複製代碼 代碼如下:<form name="form1" method="post" action="smartDropDownList.aspx" id="form1">

知道指令碼之家也是ASP.NET做的,就好奇地看看部落格園的首頁源檔案,發現沒有這些玩意,後來問了下別人,

網上也找了點資料;

總結了一下自己的想法:
1、如果你的一個頁面沒有什麼複雜的資料互動,例如登入你可以改用成ajax的登入,單條新聞介面也可以去掉,如果有留言也可以採用ajax的方式去完成!

2、後台管理頁面,資料互動性一般都有點複雜,我就覺得沒有什麼必要去掉哪些東西了,反正後台對SEO沒有任何影響,我好奇地看了看部落格園的後台也是有的
不廢話了,直接貼代碼,在你的頁面代碼中加上如下函數 複製代碼 代碼如下:protected override void Render(HtmlTextWriter writer)
{
System.IO.StringWriter html = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter tw = new System.Web.UI.HtmlTextWriter(html);
base.Render(tw);
string Temp = html.ToString();
string s1 = string.Empty, s2 = string.Empty, s3 = string.Empty, s4 = string.Empty, s5 = string.Empty, s6 = string.Empty;
int i = 0;
int j = 0;
i = Temp.IndexOf("<form");
if (i > 0)
{
j = Temp.IndexOf(">", i);
s1 = Temp.Substring(0, i);
s2 = Temp.Substring(j + 1, Temp.Length - j - 1);
}
i = s2.IndexOf("<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\"");
if (i > 0)
{
j = s2.IndexOf(">", i);
s3 = s2.Substring(0, i);
s4 = s2.Substring(j + 1, s2.Length - j - 1);
}
i = s4.IndexOf("<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\"");
if (i > 0)
{
j = s4.IndexOf(">", i);
s5 = s4.Substring(0, i);
s6 = s4.Substring(j + 1, s4.Length - j - 1);
Temp = s1 + s3 + s5 + s6;
}
else
{
Temp = s1 + s3 + s4;
}
Temp = Temp.Replace("</form>", "");
Temp = Temp.Replace("\r\n", "");
tw.Close();
Response.Write(Temp);
}

其實就是重寫了Render方法,然後截取html源檔案就能解決了,更具自己的情況去使用,覺得好用就用下!
如果你覺得簡單,或者不屑,不要噴,有問題請拍磚,謝謝!

2.查詢老外的解決辦法,是將代碼移動到尾部,但發現部分網頁報錯, 之後發現把網頁的enableviewatate=false 明顯的viewstate 代碼減少。

  原因總結:
  (1)、這是由於net記錄控制項檢視狀態的. asp.net伺服器控制項預設都記錄的.
  如果你確定一個控制項是不需要記錄控制項狀態,可以給他的EnableViewState賦值false禁用.
  個人總結:
  關閉視圖也不是最終解決辦法,只會減少,最徹底的辦法就是把form表單做成普通的html標籤。
  省去runat="server"就可以。程式儘管重要,但如果做出來的程式沒有什麼效果,是沒有意義的,
  網友見解:
  檢視狀態,這可不是什麼無用的代碼。你使用伺服器控制項,為什麼在每一次提交後,會將資訊以控制項對象的方式讀取到呢?都是因為有了檢視狀態。

  檢視狀態是可以禁用的,不過只使用EnableViewState=false是不徹底的,你還會在頁面中看到__VIEWSTATE的隱藏欄位。這是因為就算禁用了他,還是會有一個伺服器控制項在那裡使用,就是from runat="server",如果你將from編程普通html標籤,那麼頁面就乾淨了。

  當然,禁用檢視狀態後,是會提升系統效率的,因為程式不會再去分析檢視狀態中值,再為控制項對象初始化了。這樣做對於網站來說是高效的,但如果是做引用程式,那就有點自找麻煩了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.