自从用了 ASP.Net MVC后就喜欢上了它 ,因为MVC对服务器控件的依赖大大减少,它生成的HTML页面就比WebForm清爽多了,加载速度有了明显的改善。
但对于页面中内嵌script,还是不能彻底的避免,如:
〈mce:script type=“text/javascript“ language=“javascript“〉〈!--
function DepositPage() {
// 这是一个第3方的WebControl,由于是服务器控件,受MasterPage影响,它的客户端ID并不是确定的。
this.ctrlRadGrid = “#〈%= ctrlRadGrid.ClientID %〉“;
// 这是一段又臭又长的JSON,从Modal中传递过来
this.accounts = 〈%= Modal.JSON %〉;
// .............................
}
new DepositPage();
// --〉〈/mce:script〉
〈mce:script type=“text/javascript“ language=“javascript“〉〈!--
function DepositPage() {
// 这是一个第3方的WebControl,由于是服务器控件,受MasterPage影响,它的客户端ID并不是确定的。
this.ctrlRadGrid = “#〈%= ctrlRadGrid.ClientID %〉“;
// 这是一段又臭又长的JSON,从Modal中传递过来
this.accounts = 〈%= Modal.JSON %〉;
// .............................
}
new DepositPage();
// --〉〈/mce:script〉
是否有一种方法可以将这段JS不内嵌在HTML中,使用〈script src=““〉标记从外部文件加载?
答案是肯定的,通过自定义WebControl完全可以实现,有如下WebControl
[ParseChildren(false)]
public class JavascriptControl : WebControl
{
private static long s_Count = 0L;
protected override void Render(HtmlTextWriter writer)
{
if( !Visible )
return;
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter htw = new HtmlTextWriter(sw))
{
base.Render(htw);
// get the rendered content
string rendered = sw.ToString();
// remove the script tag is exist
if (rendered.Trim().StartsWith(“〈mce:script “, StringComparison.InvariantCultureIgnoreCase))
{
int index = rendered.IndexOf(’〉〈!--’) + 1;
  |