当前位置: 首页 > news >正文

【ASP.NET学习】Web Forms创建Web应用

文章目录

  • 什么是 Web Forms?
  • ASP.NET Web Forms - HTML 页面
    • 用 ASP.NET 编写的 Hello RUNOOB.COM
    • 它是如何工作的?
    • 经典 ASP
  • ASP.NET Web Forms - 服务器控件
    • 经典 ASP 的局限性
    • ASP.NET - 服务器控件
    • ASP.NET - HTML 服务器控件
    • ASP.NET - Web 服务器控件
    • ASP.NET - Validation 服务器控件
  • ASP.NET Web Forms - 事件
    • ASP.NET - 事件句柄
    • Page_Load 事件
    • Page.IsPostBack 属性
  • ASP.NET Web Forms - HTML 表单
    • ASP.NET Web 表单
    • 提交表单
  • ASP.NET Web Forms - 维持 ViewState
  • ASP.NET Web Forms - TextBox 控件
    • TextBox 控件
    • 添加脚本
  • ASP.NET Web Forms - 数据绑定
  • ASP.NET Web Forms - ArrayList 对象
    • 创建 ArrayList
    • 绑定数据到 ArrayList
  • ASP.NET Web Forms - Hashtable 对象
  • ASP.NET Web Forms - SortedList 对象
  • ASP.NET Web Forms - Repeater 控件
  • ASP.NET Web Forms - DataList 控件
  • ASP.NET Web Forms - 数据库连接
  • ASP.NET Web Forms - 导航


什么是 Web Forms?

Web Forms 是三种创建 ASP.NET 网站和 Web 应用程序的编程模式中的一种。

其他两种编程模式是 Web Pages 和 MVC(Model View Controller 模型-视图-控制器)。

Web Forms 是最古老的 ASP.NET 编程模式,是整合了 HTML、服务器控件和服务器代码的事件驱动网页。

Web Forms 是在服务器上编译和执行的,再由服务器生成 HTML 显示为网页。

Web Forms 有数以百计的 Web 控件和 Web 组件用来创建带有数据访问的用户驱动网站。

ASP.NET Web Forms - HTML 页面

简单的 ASP.NET 页面看上去就像普通的 HTML 页面。

用 ASP.NET 编写的 Hello RUNOOB.COM

转换 HTML 页面为 ASP.NET 页面最简单的方法是,直接复制一个 HTML 文件,并把新文件的扩展名改成 .aspx 。

下面的代码将以 ASP.NET 页面的形式显示实例:

<html>
<body bgcolor="yellow">
<center>
<h2>Hello RUNOOB.COM!</h2>
</center>
</body>
</html>

如果您想亲自尝试一下,请保存上面的代码到一个名为 “firstpage.aspx” 的文件中,并创建一个到该文件的链接:firstpage.aspx。

它是如何工作的?

从根本上讲,ASP.NET 页面与 HTML 是完全相同的。

HTML 页面的扩展名是 .htm。如果浏览器向服务器请求一个 HTML 页面,服务器可以不进行任何修改,就直接发送页面给浏览器。

ASP.NET 页面的扩展名是 .aspx。如果浏览器向服务器请求个 ASP.NET 页面,服务器在将结果发回给浏览器之前,需要先处理页面中的可执行代码。

上面的 ASP.NET 页面不包含任何可执行的代码,所以没有执行任何东西。在下面的实例中,我们将添加一些可执行的代码到页面中,以便演示静态 HTML 页面和动态 ASP 页面的不同之处。

经典 ASP

Active Server Pages (ASP) 已经流行很多年了。通过 ASP,可以在 HTML 页面中放置可执行代码。

之前的 ASP 版本(在 ASP.NET 之前)通常被称为经典 ASP。

ASP.NET 不完全兼容经典 ASP,但是只需要经过少量的修改,大部分经典 ASP 页面就可以作为 ASP.NET 页面良好地运行。

ASP.NET Web Forms - 服务器控件

服务器控件是服务器可理解的标签。

经典 ASP 的局限性

<html>
<body bgcolor="yellow">
<center>
<h2>Hello Runoob!</h2>
<p><%Response.Write(now())%></p>
</center>
</body>
</html>

上面的代码反映出经典 ASP 的局限性:代码块必须放置在您想要输出显示的位置。

通过经典 ASP,想要把可执行代码从 HTML 页面中分离出来是不可能的。这让页面变得难以阅读,也难以维护。

ASP.NET - 服务器控件

ASP.NET 通过服务器控件,已经解决了上述的"意大利面条式代码"问题。

服务器控件是服务器可理解的标签。

有三种类型的服务器控件:

  • HTML 服务器控件 - 创建的 HTML 标签
  • Web 服务器控件 - 新的 ASP.NET 标签
  • Validation 服务器控件 - 用于输入验证

ASP.NET - HTML 服务器控件

HTML 服务器控件是服务器可理解的 HTML 标签。

ASP.NET 文件中的 HTML 元素,默认是作为文本进行处理的。要想让这些元素可编程,需向 HTML 元素中添加 runat=“server” 属性。这个属性表示,该元素将被作为服务器控件进行处理。同时需要添加 id 属性来标识服务器控件。id 引用可用于操作运行时的服务器控件。

注释:所有 HTML 服务器控件必须位于带有 runat=“server” 属性的 标签内。runat=“server” 属性表明了该表单必须在服务器上进行处理。同时也表明了包含在它内部的控件可被服务器脚本访问。

在下面的实例中,我们在 .aspx 文件中声明了一个 HtmlAnchor 服务器控件。然后我们在一个事件句柄(事件句柄是一种针对给定事件执行代码的子例程)中操作 HtmlAnchor 控件的 HRef 属性。Page_Load 事件是 ASP.NET 可理解的多种事件中的一种:

ASP.NET - Web 服务器控件

Web 服务器控件是服务器可理解的特殊 ASP.NET 标签。

就像 HTML 服务器控件,Web 服务器控件也是在服务器上创建的,它们同样需要 runat=“server” 属性才能生效。然而,Web 服务器控件没有必要映射任何已存在的 HTML 元素,它们可以表示更复杂的元素。

ASP.NET - Validation 服务器控件

Validation 服务器控件是用来验证用户输入的。如果用户输入没有通过验证,将显示一条错误消息给用户。

每种 validation 控件执行一种指定类型的验证(比如验证某个指定的值或者某个范围的值)。

在默认情况下,当 Button、ImageButton、LinkButton 控件被点击时,会执行页面验证。您可以设置 CausesValidation 为 false ,来阻止按钮控件被点击时进行验证。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title>
</head>
<body><form id="form1" runat="server"><p>Enter a number from 1 to 100:<asp:TextBox ID="tbox1" runat="server" /><br /><br /><asp:Button Text="Submit" runat="server" /></p><p><asp:RangeValidator ControlToValidate="tbox1" MinimumValue="1" MaximumValue="100" Type="Integer" Text="The value must be from 1 to 100!" runat="server" /></p></form>
</body>
</html>

在这里插入图片描述

ASP.NET Web Forms - 事件

事件句柄是一种针对给定事件来执行代码的子例程。

ASP.NET - 事件句柄

Page_Load 事件

Page_Load 事件是 ASP.NET 可理解的众多事件之一。Page_Load 事件会在页面加载时被触发, ASP.NET 将自动调用 Page_Load 子例程,并执行其中的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace WebPages
{public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){lblCurrentTime.Text = DateTime.Now.ToString("yy年MM月dd日 HH:mm:ss");}}
}

Page.IsPostBack 属性

Page_Load 子例程会在页面每次加载时运行。如果您只想在页面第一次加载时执行 Page_Load 子例程中的代码,那么您可以使用 Page.IsPostBack 属性。如果 Page.IsPostBack 属性设置为 false,则页面第一次被载入,如果设置为 true,则页面被传回到服务器(比如,通过点击表单上的按钮):

ASP.NET Web Forms - HTML 表单

所有的服务器控件都必须出现在 标签中, 标签必须包含 runat=“server” 属性。

ASP.NET Web 表单

所有的服务器控件都必须出现在 标签中, 标签必须包含 runat=“server” 属性。runat=“server” 属性表明该表单必须在服务器上进行处理。同时也表明了包含在它内部的控件可被服务器脚本访问:

<form runat="server">...HTML + server controls</form>

注释:该表单总是被提交到自身页面。如果您指定了一个 action 属性,它会被忽略。如果您省略了 method 属性,它将会默认设置 method=“post”。同时,如果您没有指定 name 和 id 属性,它们会由 ASP.NET 自动分配。

注释:一个 .aspx 页面只能包含一个 控件!

如果您在一个包含不带有 name、method、action 或 id 属性的表单的 .aspx 页面中选择查看源代码,您会看到 ASP.NET 添加这些属性到表单上了,如下所示:

<form name="_ctl0" method="post" action="page.aspx" id="_ctl0">...some code</form>

提交表单

表单通常通过点击按钮来提交。ASP.NET 中的 Button 服务器控件的格式如下:

id 属性为按钮定义了一个唯一的名称,text 属性为按钮分配了一个标签。onClick 事件句柄规定了一个要执行的已命名的子例程。

在下面的例子中,我们在一个 .aspx 文件中声明了一个按钮控件。一次鼠标单击就可以运行一个子例程,可以更改该按钮上的文本。

<script  runat="server">
Sub submit(Source As Object, e As EventArgs)button1.Text="You clicked me!"
End Sub
</script><html>
<body><form runat="server">
<asp:Button id="button1" Text="Click me!" runat="server" OnClick="submit" />
</form></body>
</html>

在这里插入图片描述

ASP.NET Web Forms - 维持 ViewState

维持 ViewState(视图状态)

在经典 ASP 中,当一个表单被提交时,所有的表单值都会被清空。假设您提交了一个带有大量信息的表单,而服务器返回了一个错误。您不得不回到表单改正信息。您点击返回按钮,然后发生了什么…所有表单值都被清空了,您不得不重新开始所有的一切!站点没有维持您的 ViewState。

在 ASP .NET 中,当一个表单被提交时,表单会连同表单值一起出现在浏览器窗口中。如何做到的呢?这是因为 ASP .NET 维持了您的 ViewState。 ViewState 会在页面被提交到服务器时表明它的状态。这个状态是通过在带有 控件的每个页面上放置一个隐藏域定义的。

ASP.NET Web Forms - TextBox 控件

TextBox 控件用于创建用户可输入文本的文本框。

TextBox 控件

TextBox 控件用于创建用户可输入文本的文本框。

TextBox 控件的特性和属性列在我们的 WebForms 控件参考手册页面。

下面的实例演示了您可能会用到的 TextBox 控件的一些属性:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title>
</head>
<body><form id="form1" runat="server">A basic TextBox:<asp:TextBox ID="tb1" runat="server" /><br /><br />A password TextBox:<asp:TextBox ID="tb2" TextMode="password" runat="server" /><br /><br />A TextBox with text:<asp:TextBox ID="tb4" Text="Hello World!" runat="server" /><br /><br />A multiline TextBox:<asp:TextBox ID="tb3" TextMode="multiline" runat="server" /><br /><br />A TextBox with height:<asp:TextBox ID="tb6" Rows="5" TextMode="multiline"runat="server" /><br /><br />A TextBox with width:<asp:TextBox ID="tb5" Columns="30" runat="server" /></form>
</body>
</html>

在这里插入图片描述

添加脚本

当表单被提交时,TextBox 控件的内容和设置可能会被服务器脚本修改。表单可通过点击一个按钮或当用户修改 TextBox 控件的值的时候进行提交。

在下面的实例中,我们在 .aspx 文件中声明了一个 TextBox 控件、一个 Button 控件和一个 Label 控件。当提交按钮被触发时,submit 子例程将被执行。submit 子例程将写入一行文本到 Label 控件中:

窗体代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title>
</head>
<body><form id="form1" runat="server">Enter your name:<asp:TextBox ID="txt1" runat="server" /><asp:Button OnClick="submit" Text="Submit" runat="server" /><p><asp:Label ID="lbl1" runat="server" /></p></form></body>
</html>

提交按钮事件方法有3种绑定方式:

  1. 在后台代码中定义与按钮事件对应的单击事件绑定方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;namespace WebPages
{public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){//lblCurrentTime.Text = DateTime.Now.ToString("yy年MM月dd日 HH:mm:ss");}protected void submit(object sender, EventArgs e){lbl1.Text = "Your name is " + txt1.Text;}}
}
  1. 直接在页面代码中,将方法放在script脚本模块中,与form平行的区域放置代码,就可以直接实现绑定。

我们可以看到,按钮事件要绑定的方法script代码块放在与form平行的窗体区域中。也可以实现调用。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title>
</head>
<body><form id="form1" runat="server">Enter your name:<asp:TextBox ID="txt1" runat="server" /><asp:Button OnClick="submit" Text="Submit" runat="server" /><p><asp:Label ID="lbl1" runat="server" /></p></form><script runat="server">protected void submit(object sender, EventArgs e){lbl1.Text = "Your name is " + txt1.Text;}</script>
</body>
</html>
  1. 将script脚本代码放在项目下的一个文件中,在页面代码中调用这个文件。
    在这里插入图片描述
    页面代码中,在head中关联Submit.js文件,在按钮控件事件中绑定对应的方法名称,就可以调用js文件中的方法了。

Submit.js文件中代码:

function submitForm() {var name = document.getElementById('<%= txt1.ClientID %>').value;var label = document.getElementById('<%= lbl1.ClientID %>');label.innerText = "Your name is " + name;
}

页面中代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title><script src="scripts/Submit.js" type="text/javascript"></script>
</head>
<body><form id="form1" runat="server">Enter your name:<asp:TextBox ID="txt1" runat="server" /><asp:Button ID="btnSubmit" OnClientClick="submitForm(); return false;" Text="Submit" runat="server" /><p><asp:Label ID="lbl1" runat="server" /></p></form></body>
</html>

ASP.NET Web Forms - 数据绑定

我们可以使用数据绑定(Data Binding)来完成带可选项的列表,这些可选项来自某个导入的数据源,比如数据库、XML 文件或者脚本。

数据绑定

下面的控件是支持数据绑定的列表控件:

  • asp:RadioButtonList
  • asp:CheckBoxList
  • asp:DropDownList
  • asp:Listbox

以上每个控件的可选项通常是在一个或者多个 asp:ListItem 控件中定义,如下:
然而,我们可以使用某种独立的数据源进行数据绑定,比如数据库、XML 文件或者脚本,通过数据绑定来填充列表的可选项。

通过使用导入的数据源,数据从 HTML 中分离出来,并且对可选项的修改都是在独立的数据源中完成的。

在下面的三个章节中,我们将描述如何从脚本化的数据源中绑定数据。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title>
</head>
<body><form id="form1" runat="server"><asp:RadioButtonList ID="countrylist" runat="server"><asp:ListItem Value="N" Text="Norway" /><asp:ListItem Value="S" Text="Sweden" /><asp:ListItem Value="F" Text="France" /><asp:ListItem Value="I" Text="Italy" /></asp:RadioButtonList></form></body>
</html>

在这里插入图片描述

ASP.NET Web Forms - ArrayList 对象

ArrayList 对象是包含单个数据值的项目的集合。

创建 ArrayList

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title>
</head>
<body><form id="form1" runat="server"><asp:DropDownList ID="dd" runat="server"></asp:DropDownList><asp:Button ID="btnSubmit" OnClick="displayMessage" Text="Submit" runat="server" /><asp:Label ID="lbl1" runat="server" /></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!Page.IsPostBack){ArrayList mycountries = new ArrayList();mycountries.Add("Norway");mycountries.Add("Sweden");mycountries.Add("France");mycountries.Add("Italy");mycountries.TrimToSize();mycountries.Sort();dd.DataSource = mycountries;dd.DataBind();}}protected void displayMessage(object sender, EventArgs e){lbl1.Text = "Your favorite country is: " + dd.SelectedItem.Text;}</script>
</body>
</html>

在这里插入图片描述

绑定数据到 ArrayList

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title><script src="scripts/Submit.js" type="text/javascript"></script>
</head>
<body><form id="form1" runat="server"><asp:RadioButtonList ID="rb" runat="server" AutoPostBack="True" OnSelectedIndexChanged="displayMessage" /><p><asp:Label ID="lbl1" runat="server" /></p></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){ArrayList myCountries = new ArrayList();myCountries.Add("Norway");myCountries.Add("Sweden");myCountries.Add("France");myCountries.Add("Italy");myCountries.TrimToSize();myCountries.Sort();rb.DataSource = myCountries;rb.DataBind();}}protected void displayMessage(object sender, EventArgs e){lbl1.Text = "Your favorite country is: " + rb.SelectedItem.Text;}</script>
</body>
</html>

在这里插入图片描述

ASP.NET Web Forms - Hashtable 对象

Hashtable 对象包含用键/值对表示的项目。

创建与数据绑定

Hashtable 对象包含用键/值对表示的项目。键被用作索引,通过搜索键,可以实现对值的快速搜索。

通过 Add() 方法向 Hashtable 添加项目。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title><script src="scripts/Submit.js" type="text/javascript"></script>
</head>
<body><form id="form1" runat="server"><asp:RadioButtonList ID="rb" runat="server" AutoPostBack="True" OnSelectedIndexChanged="displayMessage" /><p><asp:Label ID="lbl1" runat="server" /></p></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){Hashtable myCountries = new Hashtable();myCountries.Add("N", "Norway");myCountries.Add("S", "Sweden");myCountries.Add("F", "France");myCountries.Add("I", "Italy");rb.DataSource = myCountries;rb.DataValueField = "Key";rb.DataTextField = "Value";rb.DataBind();}}protected void displayMessage(object sender, EventArgs e){lbl1.Text = "Your favorite country is: " + rb.SelectedItem.Text;}</script>
</body>
</html>

在这里插入图片描述

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title><script src="scripts/Submit.js" type="text/javascript"></script>
</head>
<body><form id="form1" runat="server"><asp:RadioButtonList ID="rb" runat="server" AutoPostBack="True" OnSelectedIndexChanged="navigate" /></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){Hashtable navigate = new Hashtable();navigate.Add("RadioButtonList", "control_radiobuttonlist.asp");navigate.Add("CheckBoxList", "control_checkboxlist.asp");navigate.Add("DropDownList", "control_dropdownlist.asp");navigate.Add("ListBox", "control_listbox.asp");rb.DataSource = navigate;rb.DataValueField = "Value";rb.DataTextField = "Key";rb.DataBind();}}protected void navigate(object sender, EventArgs e){Response.Redirect(rb.SelectedItem.Value);}</script>
</body>
</html>

在这里插入图片描述

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title><script src="scripts/Submit.js" type="text/javascript"></script>
</head>
<body><form id="form1" runat="server"><asp:DropDownList ID="dd" runat="server" AutoPostBack="True" OnSelectedIndexChanged="displayMessage" /><p><asp:Label ID="lbl1" runat="server" /></p></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){Hashtable myCountries = new Hashtable();myCountries.Add("N", "Norway");myCountries.Add("S", "Sweden");myCountries.Add("F", "France");myCountries.Add("I", "Italy");dd.DataSource = myCountries;dd.DataValueField = "Key";dd.DataTextField = "Value";dd.DataBind();}}protected void displayMessage(object sender, EventArgs e){lbl1.Text = "Your favorite country is: " + dd.SelectedItem.Text;}</script>
</body>
</html>

在这里插入图片描述

ASP.NET Web Forms - SortedList 对象

SortedList 对象结合了 ArrayList 对象和 Hashtable 对象的特性。

SortedList 对象包含用键/值对表示的项目。SortedList 对象按照字母顺序或者数字顺序自动地对项目进行排序。

通过 Add() 方法向 SortedList 添加项目。通过 TrimToSize() 方法把 SortedList 调整为最终尺寸。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Web Pages Demo</title><script src="scripts/Submit.js" type="text/javascript"></script>
</head>
<body><form id="form1" runat="server"><asp:RadioButtonList ID="rb" runat="server" AutoPostBack="True" OnSelectedIndexChanged="displayMessage" /><p><asp:Label ID="lbl1" runat="server" /></p></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){SortedList myCountries = new SortedList();myCountries.Add("N", "Norway");myCountries.Add("S", "Sweden");myCountries.Add("F", "France");myCountries.Add("I", "Italy");rb.DataSource = myCountries;rb.DataValueField = "Key";rb.DataTextField = "Value";rb.DataBind();}}protected void displayMessage(object sender, EventArgs e){lbl1.Text = "Your favorite country is: " + rb.SelectedItem.Text;}</script>
</body>
</html>

在这里插入图片描述

绑定 DataSet 到 List 控件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebPages.WebForm1" %>
<%@ Import Namespace="System.Data" %> <!-- 引入 System.Data 命名空间 -->
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>XML to DataSet Example</title>
</head>
<body><form id="form1" runat="server"><asp:DropDownList ID="ddlCountries" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlCountries_SelectedIndexChanged" /><p><asp:Label ID="lblSelected" runat="server" /></p></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){BindData();}}private void BindData(){// 创建 DataSetDataSet ds = new DataSet();// 从 XML 文件加载数据ds.ReadXml(Server.MapPath("~/App_Data/countries.xml"));// 绑定数据到 DropDownListddlCountries.DataSource = ds.Tables[0];ddlCountries.DataValueField = "code"; // 设置值字段ddlCountries.DataTextField = "Country"; // 设置文本字段ddlCountries.DataBind();}protected void ddlCountries_SelectedIndexChanged(object sender, EventArgs e){// 显示选中的国家lblSelected.Text = "Your favorite country is: " + ddlCountries.SelectedItem.Text;}</script>
</body>
</html>

ASP.NET Web Forms - Repeater 控件

Repeater 控件用于显示被绑定在该控件上的项目的重复列表。Repeater 控件可被绑定到数据库表、XML 文件或者其他项目列表。在这里,我们将演示如何绑定 XML 文件到 Repeater 控件。

ASP.NET Web Forms - DataList 控件

ASP.NET Web Forms - DataList 控件

aspx
<%@ Page Language="C#" AutoEventWireup="true" Inherits="WebPages.Default" %>
<%@ Import Namespace="System.Data" %>
<!DOCTYPE html>
<html>
<head runat="server"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>CD Catalog</title>
</head>
<body><form id="form1" runat="server"><asp:DataList ID="cdcatalog" runat="server" CellPadding="2" CellSpacing="2" BorderStyle="Inset" BackColor="#e8e8e8" Width="100%" HeaderStyle-Font-Name="Verdana" HeaderStyle-Font-Size="12pt" HeaderStyle-HorizontalAlign="Center" HeaderStyle-Font-Bold="true" ItemStyle-BackColor="#778899" ItemStyle-ForeColor="#ffffff" FooterStyle-Font-Size="9pt" FooterStyle-Font-Italic="true"><HeaderTemplate>My CD Catalog</HeaderTemplate><ItemTemplate>"<%# Container.DataItem["title"] %>" of <%# Container.DataItem["artist"] %> - $<%# Container.DataItem["price"] %></ItemTemplate><FooterTemplate>Copyright Hege Refsnes</FooterTemplate></asp:DataList></form><script runat="server">protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){DataSet mycdcatalog = new DataSet();mycdcatalog.ReadXml(Server.MapPath("cdcatalog.xml"));cdcatalog.DataSource = mycdcatalog;cdcatalog.DataBind();}}</script>
</body>
</html>

ASP.NET Web Forms - 数据库连接

ADO.NET 也是 .NET 框架的组成部分。ADO.NET 用于处理数据访问。通过 ADO.NET,您可以操作数据库。

<%@ Import Namespace="System.Data.OleDb" %>
<script runat="server">
sub Page_Load
dim dbconn,sql,dbcomm,dbread
dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;
data source=" & server.mappath("northwind.mdb"))
dbconn.Open()
sql="SELECT * FROM customers"
dbcomm=New OleDbCommand(sql,dbconn)
dbread=dbcomm.ExecuteReader()
customers.DataSource=dbread
customers.DataBind()
dbread.Close()
dbconn.Close()
end sub
</script>
<html>
<body>
<form runat="server">
<asp:Repeater id="customers" runat="server">
<HeaderTemplate>
<table border="1" width="100%">
<tr>
<th>Companyname</th>
<th>Contactname</th>
<th>Address</th>
<th>City</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%#Container.DataItem("companyname")%></td>
<td><%#Container.DataItem("contactname")%></td>
<td><%#Container.DataItem("address")%></td>
<td><%#Container.DataItem("city")%></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</form>
</body>
</html>

ASP.NET Web Forms - 导航

ASP.NET 带有内建的导航控件。

网站导航
维护大型网站的菜单是困难而且费时的。

在 ASP.NET 中,菜单可存储在文件中,这样易于维护。文件通常名为 web.sitemap,并且被存放在网站的根目录下。

此外,ASP.NET 有三个新的导航控件:

  • Dynamic menus
  • TreeViews
  • Site Map Path

相关文章:

【ASP.NET学习】Web Forms创建Web应用

文章目录 什么是 Web Forms&#xff1f;ASP.NET Web Forms - HTML 页面用 ASP.NET 编写的 Hello RUNOOB.COM它是如何工作的&#xff1f;经典 ASP ASP.NET Web Forms - 服务器控件经典 ASP 的局限性ASP.NET - 服务器控件ASP.NET - HTML 服务器控件ASP.NET - Web 服务器控件ASP.N…...

【Qt】QThread总结

目录 成员函数创建方式方式一方式二方式三注意 example总结参考文章 成员函数 创建方式 方式一 QThread 静态成员create auto thd QThread::create([]{});方式二 继承QThread类&#xff0c;重写run run函数它作为线程的入口&#xff0c;也就是线程从run()开始执行&#…...

常见的安全测试漏洞详解

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、SQL注入攻击 SQL 注入攻击主要是由于程序员在开发过程中没有对客户端所传输到服务器端的参数进行严格的安全检查&#xff0c;同时 SQL 语句的执行引用了该参…...

代理模式和适配器模式有什么区别

代理模式&#xff08;Proxy Pattern&#xff09;和适配器模式&#xff08;Adapter Pattern&#xff09;都是结构型设计模式&#xff0c;它们有不同的应用场景和目标&#xff0c;虽然在某些方面看起来相似&#xff0c;但它们的意图和实现方式有显著的区别。 1. 代理模式&#x…...

机器学习头歌(第三部分-强化学习)

一、强化学习及其关键元素 二、强化学习的分类 三、任务与奖赏 import numpy as np# 迷宫定义 maze np.array([[0, 0, 0, 0, 0],[0, -1, -1, 0, 0],[0, 0, 0, -1, 0],[-1, -1, 0, -1, 0],[0, 0, 0, -1, 1] ])# 定义强化学习的参数 gamma 0.8 # 折扣因子 alpha 0.5 # 学习率…...

【Hive】新增字段(column)后,旧分区无法更新数据问题

TOC 【一】问题描述 Hive修改数据表结构的需求&#xff0c;比如&#xff1a;增加一个新字段。 如果使用如下语句新增列&#xff0c;可以成功添加列col1。但如果数据表tb已经有旧的分区&#xff08;例如&#xff1a;dt20190101&#xff09;&#xff0c;则该旧分区中的col1将为…...

智能化的城市管理解决方案,智慧城管执法系统源码,微服务架构、Java编程语言、Spring Boot框架、Vue.js前端技术

智慧城管执法系统是一种高度信息化、智能化的城市管理解决方案&#xff0c;它利用现代信息技术&#xff0c;如微服务架构、Java编程语言、Spring Boot框架、Vue.js前端技术、Element UI组件库、UniApp跨平台开发工具以及MySQL数据库等&#xff0c;构建了一个综合性的执法管理平…...

【区间DP】【hard】力扣1312. 让字符串成为回文串的最少插入次数

加粗样式给你一个字符串 s &#xff0c;每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1&#xff1a; 输入&#xff1a;s “zzazz” 输出&#xff1a;0 解释&#xff1a;字…...

android刷机

android ota和img包下载地址&#xff1a; https://developers.google.com/android/images?hlzh-cn android启动过程 线刷 格式&#xff1a;ota格式 模式&#xff1a;recovery 优点&#xff1a;方便、简单&#xff0c;刷机方法通用&#xff0c;不会破坏手机底层数据&#xff0…...

web-前端小实验8

实现以上图片中的内容 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…...

C++实现设计模式---单例模式 (Singleton)

单例模式 (Singleton) 概念 单例模式 确保一个类在整个程序生命周期中只有一个实例&#xff0c;并提供一个全局访问点。 它是一种创建型设计模式&#xff0c;广泛用于需要共享资源的场景。 使用场景 配置管理器&#xff1a;程序中需要一个全局的配置对象。日志系统&#xff…...

【大数据】机器学习-----线性模型

一、线性模型基本形式 线性模型旨在通过线性组合输入特征来预测输出。其一般形式为&#xff1a; 其中&#xff1a; x ( x 1 , x 2 , ⋯ , x d ) \mathbf{x}(x_1,x_2,\cdots,x_d) x(x1​,x2​,⋯,xd​) 是输入特征向量&#xff0c;包含 d d d 个特征。 w ( w 1 , w 2 , ⋯ ,…...

C#类型转换

C#是静态类型的语言&#xff0c;变量一旦声明就无法重新声明或者存储其他类型的数据&#xff0c;除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的&#xff0c;也有隐式的。所谓显式&#xff0c;就是我们必须明确地告知编译器&#xff0c;我们要把变…...

OpenCV相机标定与3D重建(55)通用解决 PnP 问题函数solvePnPGeneric()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnPGeneric 是 OpenCV 中一个更为通用的函数&#xff0c;用于解决 PnP 问题。它能够返回多个可能…...

NVIDIA CUDA Linux 官方安装指南

本文翻译自&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions NVIDIA CUDALinux安装指南 CUDA工具包的Linux安装说明。 文章目录 1.导言1.1.系统要求1.2.操作系统支持政策1.3.主机编译器支持政策1.3.1.支持的C方言…...

C++中的STL

STL&#xff08;标准模板库&#xff09;在广义上分为&#xff1a;容器&#xff0c;算法&#xff0c;迭代器 容器和算法之间通过迭代器进行无缝衔接 STL大体上分为六大组件:分别为容器&#xff0c;算法&#xff0c;迭代器&#xff0c;仿函数&#xff0c;适配器&#xff0c;空间…...

前端进程和线程及介绍

前端开发中经常涉及到进程和线程的概念&#xff0c;特别是在浏览器中。理解这两个概念对于理解浏览器的工作机制和前端性能优化非常重要。以下是详细介绍&#xff1a; 1. 什么是进程和线程&#xff1f; 进程&#xff1a; 是操作系统分配资源的基本单位。一个程序启动后&#xf…...

本地用docker装mysql

目录 拉取镜像查看镜像 启动容器查看运行中的容器连接到 MySQL 容器其他一些操作 装WorkBench链接mysql——————————————允许远程登录MySql 拉取镜像 docker pull mysql查看镜像 docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE mysq…...

设计模式 行为型 责任链模式(Chain of Responsibility Pattern)与 常见技术框架应用 解析

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求&#xff0c;直到某个处理者决定处理该请求为止。这种模式的主要目的是避免请求的发送者和接收者之间…...

Apache Spark中与数据分区相关的配置和运行参数

Apache Spark中与数据分区相关的配置和运行参数涉及多个方面&#xff0c;包括动态分区设置、分区数设置、Executor与并行度配置等。合理配置这些参数可以显著提高Spark作业的执行效率和资源利用率。在实际应用中&#xff0c;建议根据业务需求和计算集群的特性进行相应的调整和测…...

“深入浅出”系列之设计模式篇:(0)什么是设计模式

设计模式六大原则 1. 单一职责原则&#xff1a;一个类或者一个方法只负责一项职责&#xff0c;尽量做到类的只有一个行为原因引起变化。 核心思想&#xff1a;控制类的粒度大小&#xff0c;将对象解耦&#xff0c;提高其内聚性。 2. 开闭原则&#xff1a;对扩展开放&#xf…...

【Git版本控制器--1】Git的基本操作--本地仓库

目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统&#xff0c;主要用于跟踪文件的更改&#xff0c;特别是在软件开发中。 为什么要版本…...

如何在Jupyter中快速切换Anaconda里不同的虚拟环境

目录 介绍 操作步骤 1. 选择环境&#xff0c;安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题&#xff0c;其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面&#xff0c;如何让jupyter快速切换不同的Pyt…...

Python自学 - “包”的创建与使用(从头晕到了然)

<< 返回目录 1 Python自学 - “包”的创建与使用(从头晕到了然) 相对于模块&#xff0c;包是一个更大的概念&#xff0c;按照业界的开发规范&#xff0c;1个代码文件不要超过1000行&#xff0c;稍微有点规模的任务就超过这个代码限制了&#xff0c;必然需要多个文件来管…...

ElasticSearch 同义词匹配

synonym.txt 电脑, 计算机, 主机 复印纸, 打印纸, A4纸, 纸, A3 平板电脑, Pad DELETE /es_sku_index_20_20250109 PUT /es_sku_index_20_20250109 {"settings": {"index": {"number_of_shards": "5","number_of_replicas&quo…...

android 官网刷机和线刷

nexus、pixel可使用google官网线上刷机的方法。网址&#xff1a;https://flash.android.com/ 本文使用google线上刷机&#xff0c;将Android14 刷为Android12 以下是失败的线刷经历。 准备工作 下载升级包。https://developers.google.com/android/images?hlzh-cn 注意&…...

Vue环境变量配置指南:如何在开发、生产和测试中设置环境变量

-## 前言 Vue.js是一个流行的JavaScript框架&#xff0c;它提供了许多工具和功能来帮助开发人员构建高效、可维护的Web应用程序。其中一个重要的工具是环境变量&#xff0c;它可以让你在不同的环境中配置不同的参数和选项。在这篇博客中&#xff0c;我们将介绍如何在Vue应用程…...

蓝桥杯_B组_省赛_2022(用作博主自己学习)

题目链接算法11.九进制转十进制 - 蓝桥云课 进制转换 21.顺子日期 - 蓝桥云课 时间与日期 31.刷题统计 - 蓝桥云课 时间与日期 41.修剪灌木 - 蓝桥云课 思维 51.X 进制减法 - 蓝桥云课 贪心 61.统计子矩阵 - 蓝桥云课 二维前缀和 71.积木画 - 蓝桥云课 动态规划 82.扫雷 - 蓝桥…...

【干货】交换网络环路介绍

定义 以太网交换网络中为了提高网络可靠性&#xff0c;通常会采用冗余设备和冗余链路&#xff0c;然而现网中由于组网调整、配置修改、升级割接等原因&#xff0c;经常会造成数据或协议报文环形转发&#xff0c;不可避免的形成环路。如图7-1所示&#xff0c;三台设备两两相连就…...

unity——Preject3——面板基类

目录 1.Canvas Group Canvas Group 的功能 Canvas Group 的常见用途 如何使用 Canvas Group 2.代码 3.代码分析 类分析:BasePanel 功能 作用 实际应用 代码解析:hideCallBack?.Invoke(); 语法知识点 作用 虚函数(virtual)和抽象类(abstract)的作用与区别 …...

BTC系列 - 启示录

推荐《区块链启示录&#xff1a;中本聪文集》这本书, 原来早在2010年, BTC生态还不完善的时候, 社区中就已经畅想出了未来其它链上的特色方案, 中本聪也都一一做了教父级回应: coinbase币的成熟时间, 交易池, 交易确认机制, 防51%攻击, 防双重消费, 水龙头, 轻量级客户端, 链上…...

C# 25Dpoint

C# 25Dpoint &#xff0c;做一个备份 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace _25Dpoint {public partial cl…...

Kotlin构造函数

class Person {var name: String? nullvar age: Int? nullfun think() {println("Mr./Ms.$name, who is $age years old, is thinking!")} }fun main () {val p Person()p.name "Jimmy"p.age 20p.think() } 在Kotlin中任意一个非抽象类都无法被继承…...

springMVC---resultful风格

目录 一、创建项目 pom.xml 二、配置文件 1.web.xml 2.spring-mvc.xml 三、图解 四、controller 一、创建项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi…...

flutter 装饰类【BoxDecoration】

装饰类 BoxDecoration BoxDecoration 是 Flutter 中用于控制 Container 等组件外观的装饰类&#xff0c;它提供了丰富的属性来设置背景、边框、圆角、阴影等样式。 BoxDecoration 的主要属性 1.color 背景颜色。类型&#xff1a;Color?示例&#xff1a; color: Colors.blu…...

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…...

微信小程序集成Vant Weapp移动端开发的框架

什么是Vant Weapp Vant 是一个轻量、可靠的移动端组件库&#xff0c;于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 官网地睛&#xff1a;介绍 - Vant Weapp (vant-ui.gith…...

MySQL从库 Last_SQL_Errno: 1197 问题处理过程

记录一个遇到过的错误&#xff0c;今天整理一下。 问题 MySQL error code MY-001197 (ER_TRANS_CACHE_FULL): Multi-statement transaction required morethan max_binlog_cache_size bytes of storage; increase this mysqld variable and try again报错很明显是max_binlog_…...

springboot 加载本地jar到maven

在Spring Boot项目中&#xff0c;如果你想要加载一个本地的jar文件到Maven本地仓库&#xff0c;你可以使用Maven的install-file目标来实现。以下是一个简单的例子&#xff1a; 打开命令行工具&#xff08;例如&#xff1a;终端或者命令提示符&#xff09;。 执行以下Maven命令…...

面向B站商业化场景的广告标题智能推荐

01.背景 大模型的发展也在不断改变广告主/代理商广告创编的过程&#xff0c;为了提高广告主的创作效率&#xff0c;提升广告主投放标题的质量&#xff0c;我们利用大语言模型技术以及B站商业数据&#xff0c;能够让广告主仅需要输入特定的关键词&#xff0c;即可以生成理论上无…...

element plus 使用 upload 组件达到上传数量限制时隐藏上传按钮

最近在重构项目&#xff0c;使用了 element plus UI框架&#xff0c;有个功能是实现图片上传&#xff0c;且限制只能上传一张图片&#xff0c;结果&#xff0c;发现&#xff0c;可以限制只上传一张图片&#xff0c;但是上传按钮还在&#xff0c;如图&#xff1a; 解决办法&…...

java进行pdf文件压缩

文章目录 pdf文件压缩 pdf文件压缩 添加依赖 <dependency><groupId>com.luhuiguo</groupId><artifactId>aspose-pdf</artifactId><version>23.1</version> </dependency>public class OptimizePdf {public static void opti…...

初识算法和数据结构P1:保姆级图文详解

文章目录 前言1、算法例子1.1、查字典&#xff08;二分查找算法&#xff09;1.2、整理扑克&#xff08;插入排序算法&#xff09;1.3、货币找零&#xff08;贪心算法&#xff09; 2、算法与数据结构2.1、算法定义2.2、数据结构定义2.3、数据结构与算法的关系2.4、独立于编程语言…...

内网服务器添加共享文件夹功能并设置端口映射

参考网址 https://blog.csdn.net/Think88666/article/details/118438465 1.服务器安装smb服务&#xff0c;由于网路安全不允许使用默认端口&#xff08;445&#xff0c;446&#xff09;&#xff0c;于是修改端口为62445、62446。 2.每台需要共享的电脑都要修改端口映射&#x…...

ruoyi-cloud docker启动微服务无法连接nacos,Client not connected, current status:STARTING

ruoyi-cloud docker启动微服务无法连接nacos&#xff0c;Client not connected, current status:STARTING 场景 当使用sh deploy.sh base来安装mysql、redis、nacos环境后&#xff0c;紧接着使用sh deploy.sh modules安装微服务模块&#xff0c;会发现微服务无法连接nacos的情…...

Python----Python高级(函数基础,形参和实参,参数传递,全局变量和局部变量,匿名函数,递归函数,eval()函数,LEGB规则)

一、函数基础 1.1、函数的用法和底层分析 函数是可重用的程序代码块。 函数的作用&#xff0c;不仅可以实现代码的复用&#xff0c;更能实现代码的一致性。一致性指的是&#xff0c;只要修改函数的代码&#xff0c;则所有调用该函数的地方都能得到体现。 在编写函数时&#xf…...

excel 整理表格,分割一列变成多列数据

数据准备 对于很多系统页面的数据是没有办法下载的。 这里用表格数据来举例。随便做数据的准备。想要看excel部分的可以把这里跳过&#xff0c;从数据准备完成开始看。 需要一点前端基础知识&#xff0c;但不多&#xff08;不会也行&#xff09;。 把鼠标放在你想要拿到本地的…...

Oracle 分区索引简介

目录 一. 什么是分区索引二. 分区索引的种类2.1 局部分区索引&#xff08;Local Partitioned Index&#xff09;2.2 全局分区索引&#xff08;Global Partitioned Index&#xff09; 三. 分区索引的创建四. 分区索引查看4.1 USER_IND_COLUMNS 表4.2 USER_INDEXES 表 五. 分区索…...

C++实现设计模式--- 观察者模式 (Observer)

观察者模式 (Observer) 观察者模式 是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生改变时&#xff0c;其依赖者&#xff08;观察者&#xff09;会收到通知并自动更新。 意图 定义对象之间的一对多依赖关系。当一个对象状…...

CentOS 6.8 安装 Nginx

个人博客地址&#xff1a;CentOS 6.8 安装 Nginx | 一张假钞的真实世界 提前安装&#xff1a; # sudo yum install yum-utils 一般情况下这个工具系统已经安装。 创建文件/etc/yum.repos.d/nginx.repo&#xff0c;输入内容如下&#xff1a; [nginx-stable] namenginx stab…...