您的位置:首页 > 编程语言 > ASP

ASP.NET 2.0入门经典学习笔记.txt

2006-10-16 16:34 609 查看
repeater
<span>
<%# Eval("date","{0:dd mmm yyyy}")%>
</span>

DateTime.Now.ToString("yyyy/mm/dd")
---------------------------------------------------------------------------------------------------------------------
多层次的Master页面
如果有多个层次,就只能在Source视图中打开了<%@master>
<%@materPageFile=%>
对于多层次,就产生了中间页,就有<asp:content>标记,该标记与Master页面中的<asp:ContentPlaceHolder>标记相关联
然后在这个<asp:content>标记中有一个<asp:ContentPlaceHolder>标记,用于包含下一层的页面。
示例

本节包含三个代码示例。第一个代码示例演示如何创建嵌套母版页 .。第二个代码示例演示如何引用在第一个代码示例中创建的母版页。第三个代码示例演示如何使用内容页来引用在第二个代码示例中创建的母版页。

下面的代码示例演示如何创建嵌套母版页,并表示名为 ParentMasterPage_1 的父级母版页。

C# 复制代码<%@ Master Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html >
<head runat="server">
<title>Nested Master Page Example</title>
</head>
<body>
<form id="form1" runat="server">
<h1>This is content in the parent master page.</h1>
<div>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
</html>

下面的代码示例演示如何使用名为 ChildMasterPage_1 的嵌套母版页,它引用在前一个代码示例中创建的母版页。

C# 复制代码<%@ Master Language="C#" MasterPageFile="~/ParentMasterPage_1cs.master" %>

<asp:Content Runat="Server" ContentPlaceHolderID="ContentPlaceHolder1">
<h2>This is the content of a nested Master Page.</h2>
<div>
<asp:contentplaceholder id="ContentPlaceHolder2" runat="server">
</asp:contentplaceholder>
</div>
</asp:Content>

下面的代码示例演示如何使用名为 ContentPage 的内容页,它引用在前一个代码示例中创建的 ChildMasterPage_1。

C# 复制代码<%@ Page Language="C#" MasterPageFile="~/ChildMasterPage_1cs.master" Title="Untitled Page"%>

<asp:content runat="server" contentplaceholderid="ContentPlaceHolder2">
This is the content of a Content control.
</asp:content>

如同Theme可以格式化网站控件的显示模式一样,MasterPage可以定义网站中不同网页的相同部分,如格局、页头、页脚、导航栏等。可以把这些控件定义到一个MasterPage上,其它网页继承这个MasterPage即可。继承后体现在这些网页公有部分都相同,而不同部分在于MasterPage有一个ContantPlaceHolder,这个控件定义了一个可以被其它页面继承的区域,该区域可以被其它页面用来摆放自己的控件。新建Web页面时核选上使用母版,然后选择母版即可。

注意:应用程序可以在Web.config中指定默认的母版页,如下所示:
<configuration>
<system.web>
<pages masterPageFile="~/Foo.master" />
</system.web>
</configuration>

好了.MasterPage来了,编写页面简单了,全部在ContentPage页面中填充ContentPlaceHolder就可以了...问题也就来了...现在,我某部分页面会使用一些javascript(放在一个calendar.js中),怎么办?哈,只过了0.01秒我就想到了"解决方案":往ContentPage写个连接不就完了么?类似:

<script type="text/javascript" src="../../../js/calendar.js">script>

(注意:src是ContentPage到JS文件的相对路径!!!)很好,小伙子,没有把一千多行的JS代码直接丢到页面:)但,问题是,你要把这句话丢到哪儿?费话,当然放到页面的"头上"了...呵呵.现在ContentPage都没有头了,head都在MasterPage里面去了.丢到ContentPage的ContentPlaceHolder外面?不行,HTML解晰不过去...
谷歌了一下,学到如下知识:说白了,MasterPage就是原来页面中的控件,只不过原来都是页面包裹着控件,现在是控件包裹着页面而已:)对于客户端-Brower来说,他对MasterPage是一无所知的.当客户请求某一页面的时候,Asp.net runtime发现该页运用了MasterPage,于是把两个独立的部分按照占位符-ContentPlaceHolder将其整合起来,返回给客户,而这一过程对客户来说是透明的....
既然这样,很简单,我们把上面那句指象js的话放到MasterPage不就完了么?(这里有一点要注意,这个时候的src,不能按照MasterPage到JS的相对路径.为什么?刚不说了么?:)OK.成功.不过"../../../"这个相对路径肯定有问题,写这个路径,完全是针对我的ContentPage,也就是说,如果其他目录的ContentPage将无法使用这个JS,这当然不行,那就把他改成绝对路径贝"~/js/..".不过理所当然的方案也不行,asp.net无法找到JS?晕了...试了好久,改了好久至今无法解决这个问题.放个针对某些页的相对路径在MasterPage当然不行.无奈之下,只能另辟捷径,最后总算发现,把上面那句JS连接的话放到每个ContentPage中的某个ContentPlaceHolder中就OK了.问题算是解决,思想算是合理,不过做法太丑陋了.....没办法,抓狂死了..

一般而言,链接路径的表达有三种方式:绝对路径、相对路径和基于根目录的路径。另外对于ASP.NET服务器控件来说,还可以使用“~”来代替根目录来表示。
在MasterPage和用户控件中,经常要使用一些图片作为背景或漂亮的按钮,但是在指定图片的src或者background时候,经常因为链接路径的问题而出错。
1.使用绝对路径:使用形如“D:\xxx\xxx.gif”的绝对文件路径一般情况下是不可取的。可以考虑采取url的方法,写成http://xxxx/xx/xxx.gif”。但是缺点是不利于移植,例如现在站点的地址为http://www.xxx.net,如果有一天站点更该http://www.xxx.com,则所有的链接地址都失效,需要进行更改,难以维护。
2.使用相对路径:使用相对于页面位置的路径,比如“..\images\xxx.gif”,这样MasterPage和用户控件中都能正确显示,但是如果将继承MasterPage的页面放到不同的文件夹下,或者使用用户控件的页面不在同一文件夹,那么该页面又会找不到正确的图片位置了!
3.基于根目录的路径:形如:<a href="/xxx/xxx.gif">这样的解决方法在ASP.NET2.0调试的时候,因为没有建立虚拟目录,并不能正确显示(我也不是很肯定,没有确认^_^)。而我在非服务器控件的HTML标签元素上无法使用“~”来指定路径。
那么,在设计时让图片可见,我们应该怎么来处理呢?我采用了CSS来完成这项工作。针对要显示图片的元素和控件,我们可以写一段简单的css来定位图片,因为css文件的位置是一般不会改变的(位于App_Theme/themename/xxx.css),这种方法也就行之有效了。
.HideBar
{
height:56px;
width:5px;
cursor:hand;
background-image: url(../../images/xxx.gif);
}接下来我们只需要在相应的元素和控件的cssclass中填入HideBar,就可以做到每个继承MasterPage或使用用户控件的页面都能正确显示图片了。
我想应该还有其它更好的办法,也希望有人能指点一二。
----------------------------------------------------------------------------------------------
集合
ArrayList:在添加项时动态调整大小,最适合用于在数据频繁改变时存储自定义对象类型,例如在执行频繁的插入和删除时
Hashtable:最适合于不会频繁改变的数据,特别适用于经常查询的数据
Queue(先进先出):在需要按顺序排序的数据时应该使用该集合
SortedList(有顺序的存储空间key/value):会使添加数据变的很慢,因为重新安排已有的项,以确保新的项目具有正确的顺序,适用于不会经

常改变的数据
Stack(后进先出):需要按逆序排序的数据时应该使用该集合
StringCololection(字符串的集合):是强类型的ArrayList,用于存储具有任意顺序的字符串,并且用于频繁改变的字符串。
StringDictionary:强类型的HashTable,因此它用语需要排序的字符串时,并且这些字符串不会经常改变。
存储字符串时,有StringCololection、StringDictionary因为他们只存储字符串
----------------------------------------------------------------------------------------------------------------
lable1.text.split(splitChars.ToCharArray())
text返回String split是String类的方法,传递到字符串中的参数并不是splitChars变量本身,
而是已经转换成字符数组的splitChars(使用ToCharArray())
Split方法所需要的类型为字符数组

如果元素的个数不发生变化,最好使用数组,否则使用集合

使用属性而不用公有变量是因为面向对象的抽象原则,那些私有变量作为内部存储器,属性只是该类的用户用语访问内部变量的方法
-------------------------------------------------------------------------------------------------------------------
学习泛型 泛型集合 System.Collections.Generic
无论何时,在需要一个自定义类的集合时,最好使用泛型集合,提高代码的可读性减少潜在错误
private items as new list(of cartItem)
cartItem 这是一个自定义类,其中有变量
dim items as new list(of cartitem)

dim item as cartItem(...)
items.add(item)

该列表是个明确的数据类型,不能执行以下的操作
items.add("ffff")
-------------------------------------------------------------------------------------------------------------
partial class 不完全类表示在编译时后台代码文件和WEb Form被融合到一个类文件中

asp.net 2.0 用户代码----Microsoft Intermediate Language--Common Language Runtime---可执行代码
编译方法:
Pre-Runtime Compilation(运行前编译):后台代码文件被编译到一个程序集并被保存在\bin目录下。在需要时再编译Web Forms 和.aspx页面

Full Runtime compilation(完全运行时编译):后台代码文件和其他所有相关代码被放在APP_Code文件夹中,然后ASP.NET 2.0创建和维护对该

程序集(在运行时从这些文件中产生的) 的引用。

部署预编译(deployment pre-compilation)它是在部署之前对项目进行完全编译
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: