新人,遇到难题了,如何让派生于父类的页面继承JS脚本。功力不够,一点办法也没有,一百分,一百分,一百分,相赠
为了方便维护,我让许多的页继承于一个基类
public class BasePage:Page
现在想让所有继承于它的所有页中都出现以下JS代码。
<script language= "javascript ">
function Disable()
{
if (window.event.keyCode==13)
{
alert( '不可能回车 ');
window.event.returnValue=false;
}
}
我应该怎么作呢??原来想在基类的Page_load中用Response.Write方法输出来着,后来发现,它输出的代码在最顶上,这样不好。
请高手给帮帮一下。
对了,以下的onKeyDown= "DisableKey() "事件,如何在基类中添加呢??
< body MS_POSITIONING= "GridLayout " onKeyDown= "DisableKey() ">
------解决方案--------------------我Blog有一个文章,你可以看看,有相似之处
http://blog.csdn.net/octverve/archive/2007/07/12/1687303.aspx
------解决方案--------------------如果是在基类中输出,还要考虑脚本块的位置问题
Page.Response.Write输出后的位置在源文件的第一行.
Page.RegisterClientScriptBlock输出后的位置会在 <form> 的下一行
Page.RegisterStartupScript输出后的位置会在 </form> 的上一行.
------解决方案--------------------// 1.x ?
public class BasePage:Page
{
protected override OnLoad(EventArgs e) {
// 1.
Page.RegisterClientScriptBlock ( " ", @ " <script language= " "javascript " ">
function Disable()
{
if (window.event.keyCode==13)
{
alert( '不可能回车 ');
window.event.returnValue=false;
}
}
</script> ");
// 2.
/*
对了,以下的onKeyDown= "DisableKey() "事件,如何在基类中添加呢??
< body MS_POSITIONING= "GridLayout " onKeyDown= "DisableKey() ">
*/
Page.RegisterClientScriptBlock ( " ", @ " <script language= " "javascript " ">
window.onload = function () {
document.body.onkeydown = DisableKey;
} </script> ");
}
}
------解决方案--------------------就因为 <body> 不是Server的标签,所以只能用Page.RegisterStartupScript输出一段脚本块了吗??
希望有更高明的方法
========
1. 对于单页
你可以给 body 加 runat=server
// .aspx
<body id=myBody runat=server/>
// .aspx.cs
myBody.Attributes[ "onkeydown "] = "DisableKey() "
2. 1 不适合你的需求场景
你只有想办法,通过 js 动态绑定事件,那么这个 js 只能服务器输出了
你可以使用 Response.Write
3.
我想 RegisterStartupScript 已经比较“优雅”的方案了,且它是安全的
ASP.NET 控件内部都是这样使用的
4. 假如你在 asp.net 2.0
请使用 Page.ClientScript.RegisterXXXX 等相关方法,这是 2.0 推荐的新 API