【.NET全栈】ASP.NET开发Web应用——基础知识


前言

ASP.NET(Active Server Page.NET)提供了强大的Web开发功能,C#是ASP.NET技术支持的语言之一。
C#不仅提供了强大的窗体应用程序和命令行应用程序的开发支持,还支持B/S模式的Web应用开发。

ASP.NET是.NET Framework的一部分,在通过HTTP请求建立文档时,它可以在Web服务器上动态创建文档。
该文档主要是指HTML文档,所以了解HTML语法也是十分重要的。

本章主要内容如下:

  • HTML文件的组成
  • ASP.NET的开发环境和配置
  • 常用的Web服务器控件
  • 数据验证控件的使用

16.1 HTML概述

Web开发的基础知识,HTML语言。

这些都是网页编程的基础。

HMTL的应用就是对网页内容的排版。

16.1.1 HTML的基本概念

HTML–Hypertext Markup Language。
超文本标记语言。
用于制作网页。
之所以“超”,是不仅限于文本内容,可以加入图片、声音、动画、影视等多种内容。

优点:在浏览器运行时,有统一规则和标准。

第一个HTML程序:

新建记事本文件,文件名后缀修改为.html:
在这里插入图片描述

加入HTML代码:

<HTML>

<HEAD>
<TITLE></TITLE>
</HEAD>

<BODY>

<CENTER>
<H>HELLO C#</H>
<BR>
<HR>
<FONT SIZE=7 COLOR=RED>MY FIRST WEB</FONT>
</CENTER>

</BODY>

</HTML>

双击使用浏览器打开运行:
在这里插入图片描述

16.1.2 HTML语言的基本元素

  1. <HTML></HTML>
    标记一个文档的开始、结束。
  2. <HEAD></HEAD>
    标记文档的开头部分。
    该标记中可以使用<title></title><script></script>
  3. <BODY></BODY>
    文档头部内容结束后,开始的文档的内容主体部分。
    <BODY>有以下属性:
    Bgcolor:设置主体背景颜色。
    Text:设置文本颜色。
    Link:设置链接颜色。
    Vlink:设置已使用链接颜色。
    Alink:设置正在被击中的链接的颜色。
  4. <TITLE></TITLE>
    放在Head中使用。用来修改浏览器窗口标题栏信息。

使用上面的HTML语言的基本元素,继续使用记事本创建一个:简单文档.html文件
在这里插入图片描述

<HTML>

<HEAD>
<TITLE>简单文档</TITLE>
</HEAD>

<BODY bgcolor = "green" text = "white">
<p>简单的一个文档</p>
</BODY>

</HTML>

在浏览器中打开的结果:
在这里插入图片描述

16.1.3 格式设置

HTML语言中用来设置文字样式的标记。

  • <p></p>标记一个段落。
    可以用align属性说明对齐方式:left/cemter/right

  • <br>回车
    在段落中小回车,在段落间大回车。

范例:

<HTML>
<HEAD>
<TITLE>区别</TITLE>
</HEAD>

<BODY bgcolor = "LightBlue", text = "DarkOrange" >
<p>这是一个段落</p><br>
<p>这是另一个段落</p>
<br>
<br>
<br>
<p>第三个段落<br></p>
<p>第四个段落</p>
<br>
<br>
<br>
<p>第五个段落第六个段落<br>第七个段落</p>

</BODY>

</HTML>

在这里插入图片描述

  • <div><div>文档分节,或格式化表。
    用法与<p></p>类似。

  • <span></span> 在行内控制特定内容的显示。
    将要设置格式的文字使用此标记包围,然后设置格式。

范例:

<HTML>
<HEAD>
<TITLE>区别</TITLE>
</HEAD>

<BODY bgcolor = "LightBlue", text = "DarkOrange" >

<div>故事的小黄花,在出生那年就飘着<div>
<div>童年的荡秋千,随记忆一直晃到现在<div>
<div>吹着前奏,<span style= "font-size:40px">望着天空</span>我想起花瓣试着飘落</div>

</BODY>

</HTML>

结果

16.1.4 超级链接

<a href=链接目标的位置>链接的名字</a> 超链接用来实现页面的联系和转换。

  • 链接到同一站点内的文档
<a href=myhtml.htm></a>
  • 链接到其他站点内的文档
<a href=http://www.myweb.edu.cn>示例</a>
  • E-mail链接代码如下
<a href=mailto:mymail@126.com>示例</a>
  • 页面内部链接。首先给页面中需要链接的地方命名
<a name=myword></a>
在页面调用的地方设置指向已经命名的链接
<a href=#mywork>转到</a>
当点击“转到”这个链接时,就从当前页的当前位置转到标记名为myword的位置。

范例

<HTML>

<HEAD>
</HEAD>

<BODY bgcolor = "LightGreen", text = "White">
<a href=myhtml.htm>本站页面链接示例</a>
<a href=http://www.web.edu.cn>外部站页面链接</a>
<a href=mailto:mymail:mymail@126.com></a>

<a name=myword></a>
<center>第二章 HTML<br><br><hr></center><br><br>
2.1 基本结构<br><br><br><br>
2.2 标记格式<br><br><br><br>
</hr>
<br><br><br><br><br><br>
<a href=#myword>转到</a>
</BODY>

</HTML>

浏览器显示结果
在这里插入图片描述

16.1.5 图像

  • <img> 标记显示网页中图像。

    一些属性:

属性说明
src图形文件路径、图形文件名。图与当前HTML文档在同一目录:<src = "pic.gif">。图在HTML文档文件夹的子文件夹:<src = "images/pic.gif">。图在HTML文档所在文件夹的上层目录:<src = "../web/pic.gif">
alt图片没完全加载时,鼠标放在图片上显示的文字
Height,Width图像的宽度和高度,像素为单位。 可以先建小图,在浏览器上按照比例放大
border边框线宽度,0表示无边框

示例:

<HTML>

<HEAD>
<title>图片显示</title>
</HEAD>

<BODY>

<img src="picEarth.gif" alt="地球" style="width:300px;height:auto;">

</BODY>

</HTML>

运行结果
在这里插入图片描述

16.1.6 表格

表格对网页意义重大,因为能够对页面排版。

  • <table></table> 创建一个表格。
    其属性:
属性说明
bgcolor表格背景色
border边框宽度,默认0
bordercolor边框颜色
bordercolorlight边框亮部分颜色
bordercolordark边框暗部分颜色
cellsapcing表格单元格之间空隙大小
cellpadding表格单元格边框与其中内容的间距大小
width表格宽度
  • <tr></tr> 表格的一行
    属性:
属性说明
align单元格中文字的水平对齐方式
valign单元格中文字的垂直对齐方式

<td></td> 标记表格中除标题外所有文字的格式
属性:

属性说明
colspan可以设置跨多列的单元格
rowspan可以设置跨多行的单元格
  • <th></th> 标记表格标题单元格的文字格式,通常是黑体居中
    示例代码:
<HTML>

<HEAD>
<TITLE>表格</TITLE>
</HEAD>

<BODY>

<TABLE bgcolor="lighblue" bordercolor="white" border="1" width="100%" cellspacing="5">
<tr align=“left”valign="top">
<td>表格1-1</td>
<td>表格1-2</td>
<td>表格1-3</td>
<td>表格1-4</td>
<td>表格1-5</td>
<td>表格1-6</td>
</tr>

<tr>
<td>表格2-1</td>
<td>表格2-2</td>
<td>表格2-3</td>
<td>表格2-4</td>
<td>表格2-5</td>
<td>表格2-6</td>
</tr>

<tr>
<td>表格3-1</td>
<td>表格3-2</td>
<td>表格3-3</td>
<td>表格3-4</td>
<td>表格3-5</td>
<td>表格3-6</td>
</tr>
</TABLE>

</BODY>

<HTML>

运行结果:
在这里插入图片描述

16.1.7 框架

框架的标记为Frame,一个框架内可以有多个HTML文件。多个框架可以同时显示在一个浏览器中。

通常的设计格局是在一个框架中放置目录,另一个框架中放置HTML文件。

  • <frameset></frameset>
    标记对可以放在<body></body>标记对的外边,也可以嵌在其他框架文中。可以嵌套使用。

该标记对有两个属性rowscols,使用该标记时至少选择两个属性之一。

属性说明
rows规定主文档中各个框架的行定位(百分数、绝对像素值、星号(*))
cols规定主文档中各个框架的列定位(百分数、绝对像素值、星号(*))

*代表没被说明的空间,如果同一个属性中出现多个星号,则将剩下的没被说明的控件平均分配。同时,所有的框架按照rows和cols的值从左往右,从上到下排列。

  • <frame> 标记放在<frameset></frameset>之间,用来定义一个具体的框架。
    属性:有两个属性,都必须赋值。
属性说明
src此框架的源HTML文件名,浏览器显示此框架src指定的HTML文件
name此框架名字,用来供超文本连接标记<a href="" target=""></a>中的target属性指定链接的HTML文件显示在哪个框架中
  • <noframesets></noframesets> 用在<frameset></frameset>标记对之间,用于在不支持框架的浏览器中显示文本或图像信息。
    此标记对之间必须先紧跟<body></body>标记对,然后才可以使用以前讲过的其他标记。

代码示例:

在这里插入图片描述
07 框架.html

<HTML>

<HEAD>
<TITLE>框架</TITLE>
</HEAD>

<frameset col="25%,*">

<frame src="07-1 框架-left.html" scrolling="no" name="left">

<frame src="07-2 框架-page1.html" scrolling="auto" name="main">

<noframes>
<BODY>
<p>你的浏览器不支持此框架!</p>
</BODY>
</noframes>

</frameset>

</HTML>

07-1 框架-left.html

<HTML>

<HEAD>
<TITLE>导航</TITLE>
</HEAD>

<BODY>
<p>导航</p>
<p><a href="07-2 框架-page1.html" target="Main">第一页</a></p>
<p><a href="07-3 框架-page2.html" target="Main">第二页</a></p>
</BODY>

</HTML>

07-2 框架-page1.html

<HTML>

<HEAD>
<TITLE>第一页</TITLE>
</HEAD>

<BODY>
<p>这是第一页</p>
</BODY>

</HTML>

07-3 框架-page2.html

<HTML>

<HEAD>
<TITLE>第二页</TITLE>
</HEAD>

<BODY>
<p>这是第二页</p>
</BODY>

</HTML>

运行结果:
将四个文件放在同一个文件夹内,运行 07 框架.html,进入导航页面。

在这里插入图片描述
点击第一页链接,进入第一个页面:
在这里插入图片描述
点击第二页链接,进入第二个页面。

在这里插入图片描述
如果浏览器不支持框架,就会显示<noframes></noframes>中的内容“你的浏览器不支持框架!”

总结:这样使用框架,实现了页面之间的跳转。

16.1.8 表单

表单是用来输入信息的区域。

是使网页具有交互功能的关键组件。

利用表单可以接收用户输入,将数据发送给服务器,服务器接收并处理这些信息后,动态产生网页,返回给页面。

  • 1.文本框
类型格式
单行文本框<input type=text name=控件名称 value=传出值>
多行文本框<textarea row="行数" cols="列数" name=控件名称></textarea>
密码框<input type=password name=控件名称 value=传出值>
  • 2.按钮
类型格式
普通按钮<input type=button name=控件名称 value=显示值>
提交按钮<input type=submit name=控件名称 value=显示值>
重置按钮<input type=reset name=控件名称 value=显示值>
  • 3.单选按钮
类型格式
单选按钮<input type=radio name=控件名称 value=传出值>
  • 4.复选框
类型格式
单选按钮<input type=checkbox name=控件名称 value=传出值>
  • 5.下拉列表框
    格式如下:
<select>
<option>选项1</option>
<option>选项2</option>
<option>选项3</option>
</select>

完整表单示例代码:

<HTML>

<HEAD>
<TITLE>表单</TITLE>
</HEAD>

<BODY>

<form mehtod="post">
<table>
<tr>
<td>用户名:</td>
<td><input name="UserName" type="text" size="10"></td>
</tr>

<tr>
<td>密   码:</td>
<td><input name="password1" type="password" size="10"></td>
</tr>

<tr>
<td>选   择</td>
<td>
<select name="myselect" multiple size="4">
<option value="1" selected>选项1</option>
<option value="2">选项2</option>
<option value="3">选项3</option>
<option value="4">选项4</option>
</select>
</td>
</tr>

<tr>
<td>性   别</td>
<td><input name="myradio" type="radio" value="M">男;</td>
<td><input name="myradio" type="radio" value="F">女;</td>
</tr>

<tr>
<td></td>
<td><input name="mysubmit" type="submit" value="确认" size="10"></td>
<td><input name="myreset" type="reset" value="重置" size="10"></td>
<td></td>
</tr>

</table>
</form>

</BODY>

</HTML>

运行结果:
在这里插入图片描述

16.2 ASP.NET Web Forms的组织

ASP.NET之前出现的ASP,给Web开发带来一次革新,ASP能够直接将代码嵌入HTML网页。使得Web页面变得简单。并且能够通过内置的组件实现强大的功能,例如ActiveX Data Objects(ADO)能够简单建立动态页面。

16.2.1 认识ASP.NET

ASP.NET是微软推出的新一代Active Server Pages。是.NET架构的一部分,新架构使编程变得简单。
接下来介绍ASP.NET应用程序开发过程中用到的控件及其他知识。
ASP.NET的技术架构
ASP.NET的技术架构图。

16.2.2 Web Forms的组织

ASP.NET窗体页是结构化的网页,即网页的表现代码和程序代码分开
在ASP.NET技术中,使表现代码和程序代码分开的技术可以分为两类:

  • CodeBehind技术
  • 不使用CodeBehind技术

CodeBehind技术简单解释为将表现代码和程序代码放在两个文件夹中。虽然采用CodeBehind技术编写程序代码所需文件数量增多,同时每个文件中的代码也增多,但开发人员要做的工作却大大减少,而且方便多个程序员分工合作。

下面演示不使用CodeBehind和使用CodeBehind技术编写程序的过程。

  • 不使用CodeBehind技术代码:
    程序代码都在<script></script>之间,表现代码与程序代码分离,但是都在一个文件内。首选在Web页面(.aspx)中放了一个ID为mylabel的Label服务端控件,在页面的Page_Load事件处理程序中给该控件的text属性赋值,使其显示在页面上。
<HTML>

<HEAD>
<TITLE>不使用CodeBehind技术</TITLE>
<script>
void page_Load(Object Src, EventArgs)
{
      mylabel.Text="不使用CodeBehind技术";
}
</script>
</HEAD>

<BODY>
<asp:label id="mylabel" runat="server"/>
</BODY>
</HTML>

运行结果:
在这里插入图片描述

  • 使用CodeBehind技术的代码:
    其中从分界线之前都是放在页面.aspx页面中,分界线后面的代码放在.aspx.cs后台代码中。
<HTML>

<HEAD>
<TITLE>使用CodeBehind技术</TITLE>
</HEAD>

<BODY>
<asp:label id="mylabel" runat="server">
</BODY>

///以下是后台代码
using System;
......
public partical class _Default : System.Web.UI.Page
{
      protected void Page_Load()
      {
            this.mylabel.Text = "使用CodeBehind技术";
      }
}
</HTML>

为了更好地说明使用CodeBehind技术,即表现代码和程序代码分离的例子,在Visual Studio 中新建一个Web Page。步骤如下:

  • 1.新建ASP.NET Web应用程序
    在这里插入图片描述
  • 2.选择空白页
    在这里插入图片描述
  • 3.Web应用项目建好了
  • 4.在这个项目鼠标选中,右键,添加新建项Web窗体
    在这里插入图片描述
  • 5.在web.aspx表现页面中加入一个asp服务器控件label,设置ID为mylabel
    在这里插入图片描述
  • 6.点开窗体文件夹,找到后缀为.aspx.cs的窗体后台代码文件,双击进入
    在这里插入图片描述
  • 7.出现窗体页面的_Load事件后台代码
    在这里插入图片描述
  • 8.我们在这个Load中对在表现页面中定义的服务器控件mylabel进行赋值,点击浏览器运行
    在这里插入图片描述
  • 9.在浏览器中的运行结果,两个文件.aspx和.aspx.cs文件很好地体现了表现代码和程序后台代码分离的CodeBehind技术
    在这里插入图片描述

16.3 Web服务器控件

ASP.NET提供了一系列服务器控件。增强了ASP.NET的功能,同时将一些功能实现封装,让控件完成。

接下来介绍一些在Web窗体页中使用的基本服务器控件

16.3.1 使用Label和TextBox控件

在这里插入图片描述
运行结果:
在这里插入图片描述

16.3.2 使用Button控件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单击按钮后文字内容由初始化状态改变成新的文字。
在这里插入图片描述
与button类似控件:

控件说明
LinkButton显示作为超链接按钮 text属性设置按钮显示文字
ImageButton显示图像的按钮 ImageUrl设置按钮上图像的四肢。AlternativeText用于定义在浏览器上不支持图片时显示的文字

16.3.3 其他控件介绍

其他控件都在工具箱中,可以拖出来一一尝试使用。
在这里插入图片描述
下面对集中常用的服务器控件做个总结:

Web服务器控件使用说明
DropDownList控件单一选择的下拉列表控件。BorderColor/BorderStyle/BorderWidth设置边框样式。AutoPostBack是否在选择后自动发给服务器true/false
ListBox控件单项或多项选择的下拉列表控件,Rows指定控件高度,若要启动多项选择,SelectionMode属性设置为Mutiple,如果多项要确定索引
CheckBox和CheckBoxList控件选择项。单项或多选。Checked属性确定是否已选。RepeatDirection属性设置控件是垂直还是水平。RepeatColumns属性设置CeckBoxList中显示的列数
RadioButton和RadioButtonList控件单选或多选, Groupname属性
Image控件在Web页面上显示图像,通过ImageUrl属性选择要显示的图片,注意要选择的图片提前家在卖资源文件夹中
Table控件Web窗体上显示表格,Caption属性设置标题,TableRow修改Rows属性

16.4 数据验证控件

用户在Web窗体中输入的数据,对于程序开发来说,数据的正确性十分重要。需要数据验证控件。数据验证控件如果放在客户端有兼容性问题,ASP.NET中使用服务器数据验证控件,能提供易用且功能强大的方法来检验输入窗体中的数据有无错误,并在必要时向用户显示消息。

16.4.1 数据验证机制介绍

验证控件可以像其他控件一样加入到Web窗体页。不同的验证控件用于特定的验证类型,多个验证控件可以附加到一个输入控件。这里介绍6中数据验证控件。

控件说明
RequiredValidator必须输入验证
CompareValidator比较限制验证
RangeValidator范围限制栏验证
RegularExpressionValidator特殊规则限制栏验证
CustomValidator自定义数据栏验证
ValidationSummary汇集数据验证消息

在处理用户的输入时,Web窗体页框架将用户的输入传递给关联的验证控件。验证控件测试用户的输入,并设置属性以指示输入是否通过了验证测试。处理完所有的验证控件后,设置页上的IsValid属性。如果有任何控件显示验证检查失败,则整页设置将无效。如果验证控件有错误,则错误信息可由该验证控件显示在页面中,或者显示在页面上其他地方的ValidationSummary控件中。当页面的IsValid属性设置为false时,显示ValidationSummary,它会轮询页面上每个验证控件,并聚合每个控件公开的文本信息。

可验证的Web服务器控件:

控件控件的属性
TextBoxText
ListBoxSelectedItem.Value
DropDownListSelectedItem.Value
RadioButtonListSelectedItem.Value

16.4.2 验证输入控件RequiredFieldValidator

如果要求用户一定要在某个输入控件中输入信息不可保持空白,则要使用RequiredFieldValidator验证控件。
输入验证控件也经常和其他验证控件一起搭配使用。

语法如下:

<asp: RequiredFieldValidator
    ID = "RequiredFieldValidator"
    ControlToValidate=" CompareValidatorID of control to validate"
    InitialValue="value"
    ErrorMessage="Message to display in ValidationSummary control"
    Text = "Message to display is control"
    Forecolor = "value"
    Backcolor = "value"
    ......
    runat = "server"
    >
</asp: RequiredFieldValidator>

16.4.3 比较验证控件CompareValidator

该控件可以将用户输入到一个输入控件中的值与另一个输入到输入控件中的值进行比较,或将该值与某个常数值相比较,
语法如下:

<asp: CompareValidator
    ID = "CompareValidator"
    ControlToValidate = "CompareValidatorID of control to validate"
    ClientValidationFunction = " ClientValidateID"
    OnServerValidate = "ServerValidateID"
    ErrorMessage = "Message to display in ValidationSummary control"
    Text =" Message to display is control"
    ForeColor =" value"
    Backcolor="value"
    ......
    runat="server"
    >

    </asp:CompareValidator>

如果输入控件为空,则不调用任何验证函数,并且验证成功。

16.4.4 范围验证控件RangeValidator

该控件可以检查用户的输入是否在指定的上限与下限之间,也可以检查数字对、字母对和日期对限顶的范围。
语法如下:

<asp:RangeValidator
    ID="RangeValidatorID"
    ControlToValidator="CompareValidatorID of control"
    MinimumValue="value"
    MaximumValue="value"
    Type="DataType"
    ErrMessage="Message to display in ValidationSummary control"
    Text="Message to display is control"
    ForeColor="value"
    Backcolor="value"
    ......
    runat="server"
    >
    </asp:RangeValidator>

如果输入控件的值无法转换为Type属性指定的数据类型,验证也会成功。推荐使用 一个附加的CompareValidator控件,将其Open属性设置为ValidationCompareOperator.DataTypeCheck,以此来检查输入值的数据类型。如果由MaximumValue或MinimumValue属性指定的值无法转换为由Type属性指定的数据类型,则该控件会引发异常。

16.4.5 正则表达式验证控件RegularExpressionValidator

该控件用于确定输入控件的值是否与某个正则表达式所定义的模式相匹配,该验证类型允许检查可预知的字符序列。
语法如下:

<asp:RegularExpressionValidator
    ID="RegularExpressionValidatorID"
    ControlToValidator="CompareValidatorID of control to validate"
    ValidationExpression="expression"
    ErrorMessage="Message to display in ValidationSummary control"
    Text="Message to display is control"
    ForeColor="value"
    Backcolor="value"
    ......
    runat="server"
    >

    </asp:RegularExpressionValidator>

如果输入控件为空,则不调用任何验证函数并且验证成功。使用该控件可以方式用户跳过某个输入控件。除非浏览器不支持客户端验证,或者显示禁用客户端验证(EnableClientScript属性设置为false),否则服务器端验证和客户端验证都要执行。

16.4.6 用户自定义验证控件CustomValidator

该控件允许用户用自定义的验证逻辑创建验证控件。自定义验证可以分为客户端验证和服务器端验证。客户端自定义验证就是使用客户端脚本语言编写一个用户自定义函数来进行客户端验证。服务端自定义验证是编写一个服务器的用户自定义函数来进行服务器验证。
语法如下:

<asp:CustomValidator
    ID="CustomValidatorID"
    ControlToValidator="CompareValidatorID of control to validate"
    ClientValidationFunction="ClientValidateID"
    OnServerValidator="ServerValidateID"
    ErrorMessage="Message to display in ValidationSummary control"
    Text="Message to display is control"
    ForeColor="value"
    Backcolor="value"
    ......
    runat="server"
    >

    </asp:CustomValidator>

即使用了客户端验证,还是要使用服务器端验证。因为服务器端验证可以防止用户通过停用或更改客户端验证脚本来略过客户端验证。

16.4.7 汇总显示验证控件ValidatorSummary

该控件用于在单个位置概述Web页面上所有的验证控件的错误信息,基于DisplayMode属性的值,可显示为列表、项目符号列表或单个段落。
语法如下:

<asp:ValidationSummary
    ID="ValidationSummaryID"
    DisplayMode="Bullest|List|SingleParagraph"
    EnableClientScript="true|false"
    ShowSummary="true|false"
    HeaderText="TextToDisplay As Summary Title"
    ......
    runat="server"
    >
    </asp:ValidationSummary>

16.4.8 数据验证控件综合使用

新建一个网站,命名为TestValidator
在这里插入图片描述
验证控件的综合应用,位于.aspx页面中。

在这里插入图片描述

16.5 小结

ASP.NET是C#应用程序的另一个重要方面,其提供了一个统一的Web开发模型,同时也是一种新的编程模型和结构。该类程序可生成伸缩性和稳定性更好的应用程序,并提供了更好的环境保护。

本章从Web基础知识入手,首先介绍了HTML语言,接着介绍了ASP.NET的基本控件。有了这些基本的知识,读者即可应用ASP.NET技术编写部分实用的网站应用程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值