gpt4 book ai didi

浅谈Asp.Net母版页的相关知识

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章浅谈Asp.Net母版页的相关知识由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Asp.Net母版页的相关知识 。

母版页的使用与普通页面类似,可以在其中放置文件或者图形、任何的HTML控件和Web控件,后置代码等。母版页的扩展名以.master结尾,不能被浏览器直接查看。母版页必须在被其他页面使用后才能进行显示.

它的使用跟普通的页面一样,可以可视化的设计,也可以编写后置代码。与普通页面不一样的是,它可以包含ContentPlaceHolder控件,ContentPlaceHolder控件就是可以显示内容页面的区域.

母版页仅仅是一个页面模板,单独的母版页是不能被用户所访问的。单独的内容页也不能够使用。母版页和内容页有着严格对应关系。母版页中包含多少个ContentPlaceHolder控件,那么内容页中也必须设置与其相对应的Content控件。当客户端浏览器向服务器发出请求,要求浏览某个内容页面时,引擎将同时执行内容页和母版页的代码,并将最终结果发送给客户端浏览器.

母版页具有下面的优点:

  • 使用母版页可以集中处理页的通用功能,以便可以只在一个位置上进行更新。
  • 使用母版页可以方便地创建一组控件和代码,并将结果应用于一组页。例如,可以在母版页上使用控件来创建一个应用于所有页的菜单。
  • 通过允许控制占位符控件的呈现方式,母版页使您可以在细节上控制最终页的布局。
  • 母版页提供一个对象模型,使用该对象模型可以从各个内容页自定义母版页。

示例代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@ Master Language=”C#” AutoEventWireup=” true ” CodeFile=”MasterPage.master.cs” Inherits=”MasterPage” %>
 
……
 
<form id=”form1″ runat=”server”>
 
<div>
 
<asp:contentplaceholder id=”ContentPlaceHolder1″ runat=”server”>
 
</asp:contentplaceholder>
 
</div>
 
</form>
 
……

注意:

1、这里的声明指示符是“<%@ Master…%>” 。

2、其内部包含<asp:contentplaceholder……>控件 。

内容页(扩展名是.aspx) 。

在建立内容页面的时候,在“添加新项”对话框中要选中“选择母版页”复选框。这样建立的页面就是内容页面,内容页面在显示的时候会把母版面的内容一起以水印淡化的形式显示出来,而在母版页中的ContentPlaceHolder控件区域会被内容页面中的Content控件替换,程序员可以在这里编写内容页面中的内容.

代码如下:

?
1
2
3
4
5
<%@ Page Language=”C#” MasterPageFile=”~/MasterPage/MP.master” AutoEventWireup=” true ” CodeFile=”Show1.aspx.cs” Inherits=”MasterPage_Show1″ id="codetool">

注意:

1、这里的声明指示符中多了一项MasterPageFile=”~/MasterPage/MP.master”,这一项是在创建内容页面时根据“选择母版页”复选框的选中情况生成的。它指明了该页是内容页面,也指明了该内容页面的母版页是哪个页面.

2、“<asp:Content ……>”就是要在其中显示的内容.

1、在母版页中编写后台代码,访问母版页中的控件:

与普通的aspx页面一样,双击按钮即可编写母版页中的代码 。

2、在内空页面中编写后台代码,访问内容页面中的控件:

与普通的aspx页面一样,双击按钮即可编写母版页中的代码 。

3、在内容页面中编写代码访问母版页中的控件:

在内容页面中有个Master对象,它是MasterPage类型,它代表当前内容页面的母版页。通过这个对象的FindControl方法,我们可以找到母版面中的控件,这样就可以在内容页面中操作母版页中的控件了.

?
1
2
TextBox txt = (TextBox)((MasterPage)Master).FindControl(“txtMaster”);
txt.Text = this .txtContent1.Text; ;

4、在内容页面中编写代码访问母版页中的属性和方法:

仍可能通过Master对象进行访问,只不过在这里要把Master对象转换成具体的母版页类型,然后再调用母版页中的属性和方不法.

这里要说明的是:母版页中要被内容页面调用的属性和方法必须是Public修改的。否则无法调到.

假设母版页中有下面的属性和方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public string TextValue
 
   {
 
get
 
{
 
return this .txtMaster.Text;
 
}
 
set
 
{
 
this .txtMaster.Text = value;
 
}
 
}
 
public void show( string str)
 
   {
 
txtMaster.Text = str;
 
}

在内容页面中可以通过下代的代码来实现对母版页中方法的调用:

?
1
2
3
((MasterPage_MP)Master).show( this .txtContent1.Text);
 
((MasterPage_MP)Master).TextValue = this .txtContent1.Text;

5、在母版页中访问内容页面的控件:

在母版页中可以通过在ContentPlaceHolder控件中调用FindControl方法来取得控件,然后对控件进行操作.

  。

复制代码 代码如下:
((TextBox)this.ContentPlaceHolder1.FindControl(“txtContent1″)).Text = this.txtMaster.Text;

  。

6、在母版页中访问内容页面中的方法和属性:

在母版页中调用子页面中的属性和方法有点难度,因为我们无法像上一步中那样通过FindControl来找到方法和属性.

于是我们想到在母版面的声明指示符中加入下面的代码:

?
1
<%@ Reference Page=”~/MasterPage/Show1.aspx” %>

在运行的时候回发现有错误,错误的内容是“无法实现循环引用”。这是因为默认在子页面中引用了母版页,你也就不能再在母版页中引用子页面了.

我在网上也没找到更好的解决方法,但这使我们想起C#是的“反射”,它可以使我们动态获取页面对象,并且可以调用它的属性和方法.

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
Type t = this .ContentPlaceHolder1.Page.GetType();
 
PropertyInfo pi = t.GetProperty(“ContentValue”); //获取ContentValue属性
 
pi.SetValue( this .ContentPlaceHolder1.Page, this .txtMaster.Text, null ); //给属性赋值
 
MethodInfo mi = t.GetMethod(“SetValue”); //获取SetValue()方法
 
object [] os = new object [1]; //建造输入参数
 
os[0] = txtMaster.Text;
 
mi.Invoke( this .ContentPlaceHolder1.Page, os); //调用SetValue方法

7、在有多个内容页面使用母版面的情况下,在母版页中根据不同的内容页面实现不同的操作 。

在母版页中可以加入多个不同的内容页面,但在设计期间,我们无法知道当前运行的是哪个内容页面。所以只能通过分支判断当前运行的是哪个子页面,来执行不同的操作。这里也用到了反射的知识.

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
string s = this .ContentPlaceHolder1.Page.GetType().ToString(); //取出内容页面的类型名称
 
if (s == “ASP.default17_aspx”) //根据不同的内容页面类型执行不同的操作
 
{
 
((TextBox) this .ContentPlaceHolder1.FindControl(“TextBox2″)).Text = “MastPage”;
 
}
 
else if (s == “ASP.default18_aspx”)
 
{
 
((TextBox) this .ContentPlaceHolder1.FindControl(“TextBox2″)).Text = “Hello MastPage”;
 
}

8、在母版面与内容页面中JS代码的操作 。

在母版页或内容页面中的控件运行之后会自动生成ID,如文本框的ID是txtContent1,在运行之后ID会自动变为ctl00_ContentPlaceHolder2_txtContent1,name属性会变为ctl00$ContentPlaceHolder2$txtContent1.

在JS代码中,我们用document.getElementById()方法,根据id取得控件对象的时候,应当使用ctl00_ContentPlaceHolder2_txtContent1这个ID名,否则会产生“未找到对象”的异常.

母版页运行机制 。

母版页仅仅是一个页面模板,单独的母版页是不能被用户所访问的。单独的内容页也不能够使用。母版页和内容页有着严格对应关系。母版页中包含多少个ContentPlaceHolder控件,那么内容页中也必须设置与其相对应的Content控件。当客户端浏览器向服务器发出请求,要求浏览某个内容页面时,ASP.NET引擎将同时执行内容页和母版页的代码,并将最终结果发送给客户端浏览器.

母版页和内容页的运行过程可以概括为以下5个步骤.

(1)用户通过键入内容页的URL来请求某页.

(2)获取内容页后,读取@ Page指令。如果该指令引用一个母版页,则也读取该母版页。如果是第一次请求这两个页,则两个页都要进行编译.

(3)母版页合并到内容页的控件树中.

(4)各个Content控件的内容合并到母版页中相应的ContentPlaceHolder控件中.

(5)呈现得到结果页.

母版页和内容页事件顺序 。

(1)母版页中控件Init事件; 。

(2)内容页中Content控件Init事件; 。

(3)母版页Init事件; 。

(4)内容页Init事件; 。

(5)内容页Load事件; 。

(6)母版页Load事件; 。

(7)内容页中Content控件Load事件; 。

(8)内容页PreRender事件; 。

(9)母版页PreRender事件; 。

(10)母版页控件PreRender事件.

(11)内容页中Content控件PreRender事件.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://www.cnsendblog.com/index.php/?p=94 。

  • asp.net
  • 母版页
  • 延伸 · 阅读

    • 2020-06-04ASP.NET Core SignalR中的流式传输深入讲解
    • 2020-06-04ASP.NET Core使用GraphQL第一章之Hello World
    • 2020-06-04ASP.NET Core依赖注入系列教程之控制反转(IoC)
    • 2020-06-04ASP.Net页面间变量值传递的方法
    • 2020-06-03ASP.NET Core依赖注入系列教程之服务的注册与提供
    • 2020-06-03ASP.NET Core DI手动获取注入对象的方法
    精彩推荐
    • ASP.NET教程HTTP 错误 500.19 - Internal Server Error解决办法详解

      HTTP 错误 500.19 - Internal Server Error解决办法详解

      这篇文章主要介绍了HTTP 错误 500.19 - Internal Server Error解决办法详解的相关资料,这里对错误进行了详细分析及说明该如何解决,需要的朋友可以参考下... 。

      杨明波(Leo Yang) 193 2020-04-02
    • ASP.NET教程注册页实现激活邮箱验证(asp.net c#)

      注册页实现激活邮箱验证(asp.net c#)

      在填写注册提交后,大一点的网站会有邮箱激活验证这一步,本文也是实现了一下,感兴趣的朋友可以参考下哈,希望可以帮助到你... 。

      asp.net技术网 291 2019-11-05
    • ASP.NET教程Asp.net mvc实时生成缩率图到硬盘

      Asp.net mvc实时生成缩率图到硬盘

      这篇文章主要介绍了Asp.net mvc实时生成缩率图到硬盘的相关资料,需要的朋友可以参考下... 。

      onestraw 212 2020-01-07
    • ASP.NET教程asp.net+ajax的Post请求实例

      asp.net+ajax的Post请求实例

      这篇文章主要介绍了asp.net+ajax的Post请求实现方法,实例分析了Ajax的发送post数据的原理与技巧,具有一定参考借鉴价值,需要的朋友可以参考下... 。

      shichen2014 289 2019-12-14
    • ASP.NET教程关于ASP.NET中TreeView用法的一个小例子

      关于ASP.NET中TreeView用法的一个小例子

      下面是一个Treeview动态的绑定3层深度的树的代码,有需要的朋友可以参考一下... 。

      ASP.NET教程网 333 2019-11-23
    • ASP.NET教程asp.net中一次性动态绑定多个droplistdown

      asp.net中一次性动态绑定多个droplistdown

      asp.net中一次性动态绑定多个droplistdown的实现代码,需要的朋友可以参考下。... 。

      asp.net教程网 170 2019-09-19
    • ASP.NET教程.Net Core在程序的任意位置使用和注入服务的方法

      .Net Core在程序的任意位置使用和注入服务的方法

      这篇文章主要介绍了.Net Core在程序的任意位置使用和注入服务的方法,很多朋友对此问题都不是很清楚,于是写这篇文章帮助大家学习,需要的朋友可以参考... 。

      Tassdar 332 2020-06-03
    • ASP.NET教程asp.net webservice返回json的方法

      asp.net webservice返回json的方法

      webservice默认的返回为XML 要返回json可以用json工具类把对象转为json字符串,需要的朋友可以参考下... 。

      ASP.NET教程网 171 2019-11-28

    最后此篇关于浅谈Asp.Net母版页的相关知识的文章就讲到这里了,如果你想了解更多关于浅谈Asp.Net母版页的相关知识的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com