網上有用的資料不多,在一本電子書中摘抄了內容如下
webControls配置節只有一個clientScriptsLocation屬性,此屬性用於指定ASP.NET客戶端腳本的默認存放路徑。這些文件是包含在HTML代碼生成的ASPX頁面時這些需要的客戶端功能,如智能導航和客戶端控件驗證。
<webControls clientScriptsLocation="/aspnet_client/{0}/{1}/"/>
上述代碼就是<webControls>的默認內容。clientScriptsLocation的內容就是用於搜索被包含的腳本。aspnet_client文件夾是當你安裝ASP.NET是在Web服務器的跟目錄下自動生成的。兩個占位符用於代表子文件夾的名字,這個名字有可能在將來的ASP.NET版本中會更改。第一個占位符總是設置成system_web。第二個占位符是.NET Framework的版本號。
ASP.NET 4不使用這個文件夾來儲存客戶端腳本文件。實際上客戶端腳本文件以資源的形式嵌入到system.web程序集中。並且通過webresource.axd HTTP handler注入到頁面中。
你可以使用客戶端腳本文件夾來保存給自定義的ASP.NET控件使用的腳本文件。
感覺這個真的已經被廢棄了,並且在.NET Framework4.6的源碼中查看webControlsSection類時也沒發現有任何代碼對這個類進行調用了,鄙人嘗試過在一個WebForm頁面中拖了一個驗證控件RequiredFieldValidator,在生成的html代碼中多了兩個js腳本的引用
可以得出已經把腳本文件嵌入到程序集裡面,通過webresource.axd來獲取到對應的資源。實際上這裡可嵌入的資源不單指js了,還可以是圖片文件。
出於好奇我就看了一下RequiredFieldValidator的代碼,
發現裡面有一行代碼是把js文件注冊進去
於是自己也嘗試了一下
ClientScript是ClientScriptManager的一個實例,js的文件名是js2.js,前面需要附帶設這個程序集的默認命名空間 這裡用到的,js2.js文件是放在網站根目錄下。
文件 的屬性是這樣設置
運行了頁面看看生成的html多了一個js的引用
疑惑的是為啥ValidatorBase裡面的嵌入js時不需要用到不需要命名空間,MSDN上的例子也是中規中矩地加上了命名空間。難道還有別的方式給它加命名空間?
但是還是有點不服氣,看看原有的aspnet_client怎麼弄出來,後來又發現了通過aspnet_regiis,可以添加aspnet_client。嘗試了確實可以加,但是沒啥效果,當初還猜想會不會是配置文件的webControls配置會影響生成文件夾的名字,後來發現我的猜想錯了,還是生成aspnet_client。看來還是在.NET 1.0版本中使用,後續版本就換用webresource.axd。而且現在也用ASP.NET MVC,這個屬於在webForm中使用,現在鄙人還是感覺把js放出來不嵌入到程序集裡面還是不方便,修改了js又要編譯代碼。