Asp.net导航控件真的值得用吗?

发布时间: 2007-01-25 04:07    作者: 未知    来源: 未知    浏览:    评论

 

刚开始接触menu控件,感觉怎么这么别扭啊。

首先说数据访问部分,为了所谓的provider pattern,一层一层的包装,而且都是些黑盒子,虽然概念是挺先进,结构好象也很清楚,但还是让我觉的迷迷糊糊,至于嘛,只是想做几个数据驱动的menu而已。还有那个前台的menu类,那么多的Properties,尤其想到menu类也是个黑盒子,一点都不知道,它生成的xhtml会是什么样的,而我只有一点点css知识而已,想到这里连尝试的欲望都没了。还不如自己动手亲自写一个menu呢,网上好象有好多现成的javascript类,比如这个:

 

Div_css 结构的,虽然没有asp.net 控件那么漂亮,可也很是实用,至少都是透明的。不过后台有点麻烦,当时的想法是:

1 设计一个类sitemap,从数据库里读导航信息,然后存到一个dataset中,

2 application_start 事件处理函数中 实例化一个sitemap 和一个sqlCachedependency ,插入到cache中。

3 一个dependency的回调函数,以更新cache中的数据

4 从cache中提取数据生成menu。

这样一来可以想象default.master的代码的代码会乱七八糟。非但不太容易写,写好的代码也不太容易复用。而且还有关于cache的很多问题。

肯定有其他办法,asp.net好多东西我都没有接触过。不过现在想想 provider pattern还是不错,一层api连接表示层,一层api连接数据访问层。

 

被迫学习menu类,希望它不要太让人意外。终于明白为什么开源让那么多人激动,开放透明啊!

 

/*****************************************************
* ypSlideOutMenu
* 3/04/2001
*
* a nice little script to create exclusive, slide-out
* menus for ns4, ns6, mozilla, opera, ie4, ie5 on 
* mac and win32. I've got no linux or unix to test on but 
* it should(?) work... 
*
* Revised:
* - 08/29/2002 : added .hideAll()
* - 04/15/2004 : added .writeCSS() to support more 
*
    
        
            
                than 30 menus.
*
* --youngpup--
****************************************************
*/

ypSlideOutMenu.Registry 
= []
ypSlideOutMenu.aniLen 
= 250
ypSlideOutMenu.hideDelay 
= 1000
ypSlideOutMenu.minCPUResolution 
= 10
// constructor
function ypSlideOutMenu(id, dir, left, top, width, height)
{
this.ie = document.all ? 1 : 0
this.ns4 = document.layers ? 1 : 0
this.dom = document.getElementById ? 1 : 0
if (this.ie || this.ns4 || this.dom) {
this.id = id
this.dir = dir
this.orientation = dir == "left" || dir == "right" ? "h" : "v"
this.dirType = dir == "right" || dir == "down" ? "-" : "+"
this.dim = this.orientation == "h" ? width : height
this.hideTimer = false
this.aniTimer = false
this.open = false
this.over = false
this.startTime = 0
this.gRef = "ypSlideOutMenu_"+id
eval(
this.gRef+"=this")
ypSlideOutMenu.Registry[id] 
= this
var d = document
var strCSS = "";
strCSS 
+= '#' + this.id + 'Container { visibility:hidden; '
strCSS 
+= 'left:' + left + 'px; '
strCSS 
+= 'top:' + top + 'px; '
strCSS 
+= 'overflow:hidden; z-index:10000; }'
strCSS 
+= '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; '
strCSS 
+= 'width:' + width + 'px; '
strCSS 
+= 'height:' + height + 'px; '
strCSS 
+= 'clip:rect(0 ' + width + ' ' + height + ' 0); '
strCSS 
+= '}'
this.css = strCSS;
this.load()
}

}

ypSlideOutMenu.writeCSS 
= function() {
document.writeln(
'<style type="text/css">');
for (var id in ypSlideOutMenu.Registry) {
document.writeln(ypSlideOutMenu.Registry[id].css);
}

document.writeln(
'</style>');
}

ypSlideOutMenu.prototype.load 
= function() {
var d = document
var lyrId1 = this.id + "Container"
var lyrId2 = this.id + "Content"
var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1]
if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
var temp
if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()"100)
else {
this.container = obj1
this.menu = obj2
this.style = this.ns4 ? this.menu : this.menu.style
this.homePos = eval("0" + this.dirType + this.dim)
this.outPos = 0
this.accelConst = (this.outPos - this.homePos) / ypSlideOutMenu.aniLen / ypSlideOutMenu.aniLen 
// set event handlers.
if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
this.menu.onmouseover = new Function("ypSlideOutMenu.showMenu('" + this.id + "')")
this.menu.onmouseout = new Function("ypSlideOutMenu.hideMenu('" + this.id + "')")
//set initial state
this.endSlide()
}

}

ypSlideOutMenu.showMenu 
= function(id)
{
var reg = ypSlideOutMenu.Registry
var obj = ypSlideOutMenu.Registry[id]
if (obj.container) {
obj.over 
= true
for (menu in reg) if (id != menu) ypSlideOutMenu.hide(menu)
if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }
if (!obj.open && !obj.aniTimer) reg[id].startSlide(true)
}

}

ypSlideOutMenu.hideMenu 
= function(id)
{
var obj = ypSlideOutMenu.Registry[id]
if (obj.container) {
if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
obj.hideTimer 
= window.setTimeout("ypSlideOutMenu.hide('" + id + "')", ypSlideOutMenu.hideDelay);
}

}

ypSlideOutMenu.hideAll 
= function()
{
var reg = ypSlideOutMenu.Registry
for (menu in reg) {
ypSlideOutMenu.hide(menu);
if (menu.hideTimer) window.clearTimeout(menu.hideTimer);
}

}

ypSlideOutMenu.hide 
= function(id)
{
var obj = ypSlideOutMenu.Registry[id]
obj.over 
= false
if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
obj.hideTimer 
= 0
if (obj.open && !obj.aniTimer) obj.startSlide(false)
}

ypSlideOutMenu.prototype.startSlide 
= function(open) {
this[open ? "onactivate" : "ondeactivate"]()
this.open = open
if (open) this.setVisibility(true)
this.startTime = (new Date()).getTime() 
this.aniTimer = window.setInterval(this.gRef + ".slide()", ypSlideOutMenu.minCPUResolution)
}

ypSlideOutMenu.prototype.slide 
= function() {
var elapsed = (new Date()).getTime() - this.startTime
if (elapsed > ypSlideOutMenu.aniLen) this.endSlide()
else {
var d = Math.round(Math.pow(ypSlideOutMenu.aniLen-elapsed, 2* this.accelConst)
if (this.open && this.dirType == "-") d = -d
else if (this.open && this.dirType == "+") d = -d
else if (!this.open && this.dirType == "-") d = -this.dim + d
else d = this.dim + d
this.moveTo(d)
}

}

ypSlideOutMenu.prototype.endSlide 
= function() {
this.aniTimer = window.clearTimeout(this.aniTimer)
this.moveTo(this.open ? this.outPos : this.homePos)
if (!this.open) this.setVisibility(false)
if ((this.open && !this.over) || (!this.open && this.over)) {
this.startSlide(this.over)
}

}

ypSlideOutMenu.prototype.setVisibility 
= function(bShow) 
var s = this.ns4 ? this.container : this.container.style
s.visibility 
= bShow ? "visible" : "hidden"
}

ypSlideOutMenu.prototype.moveTo 
= function(p) 
this.style[this.orientation == "h" ? "left" : "top"= this.ns4 ? p : p + "px"
}

ypSlideOutMenu.prototype.getPos 
= function(c) {
return parseInt(this.style[c])
}

ypSlideOutMenu.prototype.onactivate 
= function() { }
ypSlideOutMenu.prototype.ondeactivate 
= function() { }


Smile Big Smile Surprise Stick out tongue Wink Sad Tongue Tied Indifferent Crying Embarrassed Cool Angry Angel Devil [8-|] [:#] [:-*] [:^)] [<:o)] [|-)] Yes Beer Left Hug Music Star Time Snail Pizza Automobile Umbrella Computer Storm [mo] [8o|] [^o)] [+o(] [*-)] [8-)] Coffee No Drinks [Z] Right Hug Cake Broken Heart Gift Wilted Flower Movie Dog Idea Sleep Email Travel Paradise
呢称:

加粗 斜体 下划线 链接 图片 代码 邮件地址 引用 列表

最多只能输入100个字符

Tags

SQL 数据库 asp.net C# XML 控件 .NET教程 程序 事件 数据 安全 代码 Server 客户端 验证 数据库专栏 接口 文件 Oracle DataSet 函数 DataGrid 问题 .net return C#语言 JavaScript 服务 IIS 对象 语句 windows 继承 时间 web.config 设计 开发 参数 变量 解决 字符 ADO.net 环境 VB.Net语言 web 异常 工具 服务器 计算 实例 OLEDB Application VB Word WebService insert asp net 安装 记录

精华推荐

更多

精品下载

更多