申明文筆不好,不過看完你肯定會有收獲。廢話少說,下面開始。按照WebResource.axd是什么,為什么,怎么樣 科學思路進行。
看到頁面中有</scriptsrc"/WebResource.axd?d=Bdl2sEQMgrMj6AITjzrcgZbPgTObB4ykXx6CSfzqrXWcfOyu_NiIQ6E3upD_Pk1W8jYtP47x6aWIKT3u_pHTk5MhN9AHHLH_d7enHWD6g_mWKWu1McSvPengCcNlniVWCG7PTQ2&t=634725230533545912"type"text/javascript">script>
不知道WebResource.axd 為何物,,遂百度一番,,資料甚少,,未果。。問題依舊,繞開不是辦法,解決才是王道。百度繼續。。
隨著東一片文章片段,西一簡短說明,拼裝起來慢慢了解了大概。 下面的有此片段是本人從網上摘抄而成,讀完你也許大概可能會知道如何時使用此物。
一、WebResource.axd 是什么
//摘抄 http://blog.csdn.net/heker2007/article/details/2078117
很多ASP.NET server控件都需要另外的外部資源來實現某些功能.比如,使用任何一個ASP.NET validation驗證控件時,都需要一系列的JavaScript functions來執行它們的客戶端驗證.雖然可以在頁面上添加這些JavaScript functions,不過更高效的方法是將這些函數封裝在一個外部的JavaScript文件里,然后在頁面通過<script src="PathToExternalJavaScriptFile" type="text/javascript" >的形式來將該文件包含在頁面里.這樣一來不僅可以實現對頁面的瘦身,還可以允許瀏覽器對該JavaScript文件施行緩存(這樣就不用每個頁面在登錄/回傳時向瀏覽器發送該JavaScript代碼了)
在ASP.NET 2.0之前,用戶瀏覽器要訪問這種外部資源的話,我們必須將它們作為具體的文件放在文件系統里.如果你使用ASP.NET 1.x的驗證控件的話,你的頁面必須添加一個對JavaScript文件的引用,如/aspnet_client/system_web/version/WebUIValidation.js.這些外部文件有礙最后的部署.
為解決這個問題,ASP.NET 2.0允許將外部資源植入控件的裝配件里,通過一個指定的URL對其訪問.將外部images, JavaScript files,CSS files植入控件的裝配件后,部署就容易了,因為所有的資源都包含在.dll文件里了. 完成植入操作后,在ASP.NET 2.0頁面里我們可以通過一個指定的URL(WebResource.axd)來實現對這些資源的訪問.
上面這段告訴你 WebResource.axd是什么!說白了,就是將一些js,jpg,bmp等封裝或叫植入到類庫里面。
二、為什么
為什么WebResource.axd要使用這個東西,不使用這個東西可能嗎?,,答案當然是:可以。那樣你就按你老套的辦法,將js文件,使用<script src="xxx" type="test/javascript"></script>這種方法
,引入外部文件。這些外部文件有礙最后的部署。
而使用WebResource.axd這個東西,則可以輕易解決上面的問題,而且好處多多,,因為js等文件是放在類庫中的,所以在類里面,可以隨時方便調出來,有指那打那的感覺。
三、怎么樣
這部分才是重中之重!有了js文件,怎么將他植入面類庫中,,然后又在頁面上調出來里面的函數。
1,我們新建一個類庫,名稱為Sun.Controls,,命名空間也為Sun.Controls。這名子你隨便起。
2,然后在里面建一個類WebDemo.cs。此類里面有如下方法
public class WebDemo : Page //繼承自Page類
{
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
string key = base.GetType().ToString();
if (!base.ClientScript.IsClientScriptBlockRegistered(key))
{
base.ClientScript.RegisterClientScriptResource(typeof(FormPage), "Sun.Controls.demo.js"); //這時就是將js文件注冊到頁面,,注意js文件名稱的寫法:命名空間+文件夾名子(如果沒有放在文件夾中可以省略)+文件名稱 如Sun.Controls.demo.js
}
}
}
3 ,再新建一個js文件,,demo.js。demo.js文件里面有一個方法
function HellowWeb() {
alert("我來自類庫中的js文件");
}
然后將這個文件放到Sun.Controls這個類庫的根目錄下.
OK,下面就是配置WebResource.axd這個東西,讓這個東西起作用,指那打那。
4,在你的"解決方法資源管理器"中找到WebDemo.cs類,在類中找到 demo.js這個文件 ,右擊查看“屬性”,,將“生成操作”設為“嵌入的資源”。此屬性默認是“內容”,如果你不改為“ 嵌入的資源 ”的話,頁面底下會有一個常伴你的黃色感嘆號,提示你“未找到對象”,,讓你明年你也調不到這個js文件里的方法。
5,在 WebDemo.cs類的Properties文件夾中,找到AssemblyInfo.cs這個類,,雙擊打開。。。添加一句 [assembly: WebResource("Sun.Controls.demo.js
", "application/x-javascript")] 這里如果 WebResource不是淡藍色的話,引入using System.Web.UI。。后面的參數寫“ text/javascript”或“ application/x-javascript
”都可以,不過寫后的這個感覺牛X一點,,至于 為什么?你打IIS里面的 “MIME類型”,雙擊.js就可以看到,,里面就是這么寫的。
6,好了,,在解決方案中新建一個網站, 新建一個index.asp頁面,不要index.aspx.cs這個文件。。
<%@ Page Language="C#" inherits="Sun.Controls.WebDemo" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="from1" runat="server">
<div>
<input id="Button2" onclick="HellowWeb();" type="button" value="button" />
</div>
</form>
</body>
</html>
這里要注意,1.最上面的一句inherits="Sun.Controls.WebDemo" ,意思是本頁面是繼承這個類的,因為只在這個類中,我們注冊了js文件。2.一定要有一個form,并且這個 form必須是 runat="server"的。
好了,可以啟動測試這個頁面了,,擊點頁面中的按鈕,看是不是能掉到deom.js里面的方法了。。
如果出錯在web.config <system.web>下加一句<pages validateRequest="false" enableEventValidation="false" pageBaseType="Sun.Controls.WebDemo
,Sun.Controls" />