仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 644|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之ASP.NET 2.0站点舆图搭建网站导航布局

[复制链接]
海妖 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:42:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你觉得数据库怎么样?asp.net|导航|站点  2、利用SiteMap的体例

  你能够以三种罕见体例来利用在前一节所创立的站点舆图文件:

  ・利用SiteMapPath控件

  ・利用SiteMap数据源控件

  ・利用SiteMap类

  这个SiteMapPath控件同意你天生breadcrumb。显现出甚么是breadcrumb。


:Breadcrumb导航
  SiteMapPath控件显现各类层级的导航。比方,你能够点击父或根级别以往回导航或转到顶层。固然,你也能够定制导航条理。

  ASP.NET2.0中还带有一组优秀的导航控件,包含TreeView和菜单。借助于SiteMap数据源控件,你能够把站点舆图文件与这些控件绑定到一同。

  有些情形下,内置的导航控件大概没法满意你的请求。在这类情形中,你能够以编程体例存取这个站点舆图文件而且读各类siteMapNode结点。然后,你能够天生一个定制的导航布局―利用siteMapNode的title和URL属性。

  3、利用SiteMapPath控件

  在具体会商细节前,让我们起首创立我们必要的目次布局和Web表单。起首,把两个文件夹Products和Services增加到网站。然后,增加一个新的Master页面MasterPage.master。接着增加显现在表格2中的Web表单,而且确保当你增加它们时都为其设置master页面。

Web表单名文件夹Default.aspxWebsiterootContact.aspxWebsiterootDefault.aspxProductsProduct1.aspxProductsProduct2.aspxProductsDefault.aspxServicesService1.aspxServicesService2.aspxServices      表格2:Web表单列表

  如今,翻开你后面增加的Master页面。把一个Label控件和一个SiteMapPath控件拖动到它下面。然后,把该Label的Text属性设置为“Welcome!”。

  以下的列表显现了MasterPage.master页面中的一切标志:

<%@MasterLanguage="C#"AutoEventWireup="true"
CodeFile="MasterPage.master.cs"Inherits="MasterPage"%>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>UntitledPage</title>
</head>
<body>
 <formid="form1"runat="server">
  <div>
  <asp:LabelID="Label1"runat="server"Font-Size="XX-Large"ForeColor="Blue"Text="Welcome!"></asp:Label><br/>
  <asp:SiteMapPathID="SiteMapPath1"runat="server"
Font-Names="Verdana"Font-Size="0.8em" PathSeparator=":">
   <PathSeparatorStyleFont-Bold="True"ForeColor="#5D7B9D"/>
   <CurrentNodeStyleForeColor="#333333"/>
   <NodeStyleFont-Bold="True"ForeColor="#7C6F57"/>
   <RootNodeStyleFont-Bold="True"ForeColor="#5D7B9D"/>
  </asp:SiteMapPath>
  <br/>
  <br/>
 <asp:contentplaceholderid="ContentPlaceHolder1"runat="server">
 </asp:contentplaceholder>
</div>
</form>
</body>
</html>
  如今,从根文件夹翻开Default.aspx。Default.aspx应当看似的模样。


:Default.aspx的示例运转  为了计划这个页面,增加一个具有4行和1列的表格。拖动一个Label控件到最上边一行而且设置它的Text属性为“接待离开我们的网站!”。然后,拖动三个HyperLink控件到剩下的行上,而且设置它们的Text和NavigateUrl属性,显现于表格3中。

HyperLinkIDText属性NavigateUrl属性HyperLink1Products~/products/default.aspxHyperLink2Services~/Services/default.aspxHyperLink3ContactUs~/contact.aspx      表格3:设置HyperLinks的属性

  上面的列表显现了Default.aspx中的完全标志:

<%@PageLanguage="C#"MasterPageFile="~/MasterPage.master"
AutoEventWireup="true"CodeFile="Default.aspx.cs"
Inherits="_Default"Title="UntitledPage"%>
<asp:ContentID="Content1"
ContentPlaceHolderID="ContentPlaceHolder1"Runat="Server">
<center>
 <table>
  <tr>
   <tdwidth="60%">
    <asp:LabelID="Label1"runat="server"Font-Size="X-Large"
Text="WelcometoourWebsite!"></asp:Label></td>
  </tr>
  <tr>
   <tdwidth="60%">
    <asp:HyperLinkID="HyperLink1"runat="server"
Font-Size="X-Large"NavigateUrl="~/Products/Default.aspx">Products
    </asp:HyperLink></td>
  </tr>
  <tr>
   <tdwidth="60%">
    <asp:HyperLinkID="HyperLink2"runat="server"Font-Size="X-Large"
NavigateUrl="~/Services/Default.aspx">Services
    </asp:HyperLink></td>
  </tr>
  <tr>
   <tdwidth="60%">
    <asp:HyperLinkID="HyperLink3"runat="server"
Font-Size="X-Large"NavigateUrl="~/Contact.aspx">ContactUs
    </asp:HyperLink></td>
  </tr>
 </table>
</center>
</asp:Content>
  如今,从Products文件夹下翻开Default.aspx而且依照所示来计划它。


:Products文件夹的默许页面
  表格4枚举了在Web表单中所利用的一切超等链接。

HyperLinkIDText属性NavigateUrl属性HyperLink1FirstProduct~/products/product1.aspxHyperLink2SecondProduct~/products/product2.aspx     表格4:Products文件夹下Default页面中的超等链接信息

  遵守一样事理,从Services文件夹下计划Default.aspx,了局如所示。


.Services文件夹的默许页面
  表格5枚举出了利用于Web表单中的超等链接信息。

HyperLinkIDText属性NavigateUrl属性HyperLink1FirstService~/Services/service1.aspxHyperLink2SecondService~/Services/service2.aspx     表格5:Products文件夹下Default页面中的超等链接信息

  最初,把一个标签增加到每个别的Web表单而且按表格6所示设置它的Text属性。

Web表单名Label的Text属性~/Contact.aspxContactUs~/Products/Product1.aspxFirstProductDetails~/Products/Product2.aspxSecondProductDetails~/Services/Service1.aspxFirstServiceDetails~/Services/Service2.aspxSecondServiceDetails     表格6:从剩下的Web表单中设置Label的Text属性

  如今,从根文件夹下运转Default.aspx而且导航到Product1.aspx页面。显现了Web表单的示例运转情形。


:Product1.aspx的示例运转
  注重,web.sitemap文件的title和URL属性是如何用于天生“breadcrumbs”的。别的,还要注重,父级是如何跟着以后页面题目一同显现的。试一试导航到各类页面并察看SiteMapPath控件。
<P>  4、利用SiteMap数据源控件

  站点舆图的利用其实不仅限于SiteMapPath控件。你还能够把站点舆图依靠到可导航控件(比方TreeView)上。鄙人列例子中,你将利用不异的站点舆图文件来完成与一个TreeView控件的绑定。

  把一个新的Web表单SiteMapDataSourceDemo.aspx增加到网站上。然后,把一个SiteMap数据源控件(SiteMapDataSource1)和一个TreeView控件(TreeView1)拖动到表单上。把这个TreeView控件的DataSourceID属性设置为SiteMapDataSource1。别的,还要把该TreeView控件的ShowLines属性设置为true。上面是SiteMapDataSourceDemo.aspx页面中的完全的标志:

<%@PageLanguage="C#"AutoEventWireup="true"
CodeFile="SiteMapDataSourceDemo.aspx.cs"
Inherits="SiteMapDataSourceDemo"%>
<htmlxmlns="http://www.w3.org/1999/xhtml">
<headrunat="server">
<title>UntitledPage</title>
</head>
<body>
 <formid="form1"runat="server">
  <asp:TreeViewID="TreeView1"runat="server"DataSourceID="SiteMapDataSource1"
ShowLines="True">
  </asp:TreeView>
  <asp:SiteMapDataSourceID="SiteMapDataSource1"runat="server"/>
 </form>
</body>
</html>
  如今,运转这个Web表单以察看不异的导航布局是如何被主动天生到TreeView中的(见)。


:把网站舆图文件绑定到一个TreeView控件
<P>  5、利用SiteMap类

  在SiteMapPath或TreeView控件中显现站点舆图数据效果太好了。但是,偶然你大概必要计划定制天生逻辑。比方,你大概想开辟一个定制的导航控件―它仅为了垂直地显现其父级。在如许的情形下,你必要以编程体例来存取这个站点舆图文件。SiteMap类同意你正确地完成这一点。

  这个SiteMap路径具有两个主要的属性:RootNode和CurrentNode。它们的范例都是SiteMapNode,而且它们都能使你分离参考站点舆图的根结点和以后结点。表格7枚举了SiteMapNode类的一些主要的属性。

属性形貌ChildNodes代表以后结点的一切子结点的汇合HasChildNodes唆使是不是站点舆图结点具有子结点(true/false)Title前往在站点舆图文件中指定的title属性的值Url前往在站点舆图文件中指定的url属性的值Description前往在站点舆图文件中指定的description属性的值ParentNode指出以后结点的父站点舆图结点的参考    表格7:SiteMapNode类的一些主要的属性

  上面的示例利用了SiteMap路径来存取一个站点舆图文件的单个结点。然后,以编程体例把它们增加到一个TreeView控件。

  增加一个称为SiteMapCustom.aspx的Web表单。然后,把一个TreeView控件拖动到其上。把列表代码增加到这个Web表单的Page_Load事务:

protectedvoidPage_Load(objectsender,EventArgse)
{
 intcount=SiteMap.RootNode.ChildNodes.Count;
 for(inti=0;i<count;i++)
 {
  SiteMapNodesmNode=SiteMap.RootNode.ChildNodes;
  TreeNodetvNode=newTreeNode(smNode.Title,"","",smNode.Url,"");
  TreeView1.Nodes.Add(tvNode);
  if(smNode.HasChildNodes)
  {
   intchildCount=smNode.ChildNodes.Count;
   for(intj=0;j<childCount;j++)
   {
    SiteMapNodesmChildNode=smNode.ChildNodes[j];
    TreeNodetvChildNode=newTreeNode(smChildNode.Title,
     "","",
     smChildNode.Url,"");
    tvNode.ChildNodes.Add(tvChildNode);
   }
  }
 }
}
  在这里,你起首失掉根结点中的子结点的总数。然后,你轮回遍历根结点的ChildNodes汇合。在每次遍历中,你城市创立一个新的TreeNode类的实例而且在它的机关器中指定它的题目和url。然后,你把这个TreeNode增加到TreeView的Nodes汇合中。然后,你反省是不是以后SiteMapNode有任何子结点。假如有,你就对之举行遍历,反复TreeNode创立历程。注重,这一次你把新的TreeNodes增加到以后TreeNode工具的ChildNodes汇合中。

  注重,由于你晓得只存在两级的嵌套,以是你在轮回中利用了2。为了使得你的逻辑更具有一样平常性,你可使用递返来添补TreeView。

  运转Web表单,那末你将再次看到相似于所示的内容。
<P>  6、利用平安整修

  常常情形下,网站都要完成基于脚色的平安形式。比方,你能够在你的使用程序中具有分歧的脚色,比方体系办理员,产物测试员和服务测试员。在如许的情形中,你常常必要把持显现给用户的站点导航链接。比方,假如以后登录的用户属于产物测试员脚色,那末你大概仅想显现与产物相接洽的链接,而埋没任何别的链接。一种处置脚色的办法是利用手工编码,可是,它请求以编程体例完成一切的受权逻辑。幸亏,站点舆图文件和SiteMap数据源控件一同供应了一种称为平安整修的特性来匡助你。

  为了测试平安整修,你必要启动你的网站的会员和脚色特性。翻开web.config文件而且在个中到场以下标志:

<authenticationmode="Forms"/>
<authorization>
<denyusers="?"></deny>
</authorization>
  在此,你已把认证形式设置为Forms。你还能够设置受权划定规矩,如许以来匿名的用户城市被克制存取此网站。然后,你必要启动脚色办理特性―经由过程把以下标记增加到web.config文件中:

<roleManagerenabled="true"/>
  然后,从VS.NET菜单下选择“WebSite>ASP.NETConfiguration”以翻开Web站点办理工具。利用这个工具来增加两个脚色:ProductTesters和ServiceTesters(参考)。当一个属于ProductTesters脚色的用户签进时,你只想完成把与产物相干的链接显现在导航TreeView控件中。一样,当一个属于ServiceTesters脚色的用户签进时,应当只在TreeView中显现与服务相干的链接。


:利用Web站点办理工具增加脚色
  利用Web站点办理工具创立两个用户,分离叫user1和user2。把user1增加到ProductTesters脚色,把user2增加到ServiceTesters脚色(见0)。


0:利用Web站点办理工具创立用户
  注重:默许地,用户和脚色信息被存储在你的网站的App_Data文件夹下的ASPNETDB数据库中。这个数据库是由ASP.NET主动创立的,假如它不存在的话。

  如今,把一个新的站点舆图文件SecurityTrimming.sitemap增加到网站而且输出以下标志:

<?xmlversion="1.0"encoding="utf-8"?>
 <siteMapxmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
 <siteMapNodeurl="default.aspx"title="Home"description="MyWebSite">
 <siteMapNodetitle="Products"roles="ProductTesters">
  <siteMapNodeurl="~/products/product1.aspx"title="FirstProduct"/>
  <siteMapNodeurl="~/products/product2.aspx"title="SecondProduct"/>
 </siteMapNode>
 <siteMapNodetitle="Services"roles="ServiceTesters">
  <siteMapNodeurl="~/services/service1.aspx"title="FirstService"/>
  <siteMapNodeurl="~/services/service2.aspx"title="SecondService"/>
 </siteMapNode>
 <siteMapNodeurl="contact.aspx"title="ContactUs"/>
</siteMapNode>
</siteMap>
  这里的年夜多半标志与在web.sitemap文件中的不异。但是,这里有一个主要的属性增加到了Products和Services―siteMapNodes:roles。这个roles属性指定可以存取这个结点及其子结点的脚色。由于与产物相接洽的链接仅显现给属于ProductTesters脚色的用户,你要把ProductssiteMapNode的roles属性设置为ProductTesters。遵守不异的事理,你要把ServicessiteMapNode的roles属性设置为ServiceTesters。不具有指定的roles属性的siteMapNodes关于一切用户都可存取。别的,还应注重,Products和Services结点不再具有指定的URL属性。

  如今,你必要设置站点舆图供应者而且启动平安整修以便SiteMap数据源控件可以依照你的请求举动。把以下标志增加到web.config文件中:

<siteMapdefaultProvider="myprovider"enabled="true">
<providers>
 <addname="myprovider"
  type="System.Web.XmlSiteMapProvider"
  siteMapFile="SecurityTrimming.sitemap"
  securityTrimmingEnabled="true"/>
</providers>
  在此,你增加了<siteMap>节而且指定一个指向SecurityTrimming.sitemap文件的供应者。注重,这里的securityTrimmingEnabled属性被设置为true以撑持平安整修。在你设置完<siteMap>节后,这个SiteMap数据源控件主动地从这个节中“拾取”这些设置。

  把一个称为Login.aspx的新的web表单增加到网站上。然后,把一个Login控件拖动到它下面而且设置它的DestinationPageUrl属性为“~/SiteMapDataSourceDemo.aspx”。注重,你在之前已开辟了SiteMapDataSourceDemo.aspx。

  运转Login.aspx(参考1)而且输出针对user1的凭据。


1:登录页面
  在你乐成地登录今后,你应当瞥见如2所示的TreeView。由于user1属于ProductTesters脚色,以是埋没了与服务相接洽的链接。


2:利用平安整修
  7、总结

  站点舆图是一XML文件―它包括你的Web站点布局的一切细节。你可使用站点舆图文件来天生导航布局。三种利用站点舆图文件的经常使用办法分离是:利用SiteMapPath控件,利用SiteMap数据源控件,或利用SiteMap类。你还可使用一个特性―称为平安整修来撑持到天生的导航链接的基于脚色的平安性。这些控件和类配合匡助为你的Web地址创立一个专业的导航布局。
2003年中微软发布最新版本的ASP.netWebMatrix,对于我们喜欢用Asp.net来编程的朋友实在是个好消息,我也实实在在的将Asp.net更深入的研究了一下,以方便我以后更好的运用它,同时我也讲讲使用它的感受。
深爱那片海 该用户已被删除
沙发
发表于 2015-1-19 21:19:20 | 只看该作者
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.ckuyun.com),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
因胸联盟 该用户已被删除
板凳
发表于 2015-1-25 19:06:26 | 只看该作者
这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-3 13:58:02 | 只看该作者
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
5#
发表于 2015-2-9 03:01:39 | 只看该作者
但是目前在CGI中使用的最为广泛的是Perl语言。所以,狭义上所指的CGI程序一般都是指Perl程序,一般CGI程序的后缀都是.pl或者.cgi。
小妖女 该用户已被删除
6#
发表于 2015-2-26 19:43:48 | 只看该作者
主流网站开发语言之JSP:JSP和Servlet要放在一起讲,是因为它们都是Sun公司的J2EE(Java2platformEnterpriseEdition)应用体系中的一部分。
若相依 该用户已被删除
7#
发表于 2015-3-8 17:11:27 | 只看该作者
在asp.net虚拟主机的服务提供商中,目前首推的是CNNIC的其中一家域名注册机构---时代互联(www.now.net.cn),他们早在2001年微软刚推出Asp.net时就推出了对应的Asp.net虚拟主机了,经笔者的使用测试,他提供的Asp.net性能非常的稳定,版本也会定期的更新,目前他的
活着的死人 该用户已被删除
8#
发表于 2015-3-16 07:26:28 | 只看该作者
由于JSP/Servlet都是基于Java的,所以它们也有Java语言的最大优点——平台无关性,也就是所谓的“一次编写,随处运行(WORA–WriteOnce,RunAnywhere)”。除了这个优点,JSP/Servlet的效率以及安全性也是相当惊人的。
飘灵儿 该用户已被删除
9#
发表于 2015-3-22 21:09:47 | 只看该作者
但是java靠开源打出的一片天地,特别是在微软的垄断下能打开今天的局面还是有它的生命力的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 04:26

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表