C# , ASP.NET MVC

C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。

 C Sharp 

在任何 C# 程序中的第一条语句都是:using System;

包含main函数的类不需要实例化?

sizeof 方法。表达式 sizeof(type) 产生以字节为单位存储对象或类型的存储尺寸。

赋值给数组

您可以通过使用索引号赋值给一个单独的数组元素,比如:

double[] balance = new double[10];
balance[0] = 4500.0

C# 可空类型

int i; //默认值0
int? ii; //默认值null

C# 接口(Interface)

接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分。

接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。

接口使得实现接口的类或结构在形式上保持一致。

抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。

接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。

抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。

命名空间的使用与C++有区别

first_space.namespace_cl

using()语句

是用来简化资源释放的,在一定的范围内有效,除了这个范围时,自动调用IDisposable释放掉,当然并不是所有的类都适用,只有实现了IDisposable接口的类才可以使用.

using (SqlConnection conn=new SqlConnection("Data Source=.;Initial Catalog=imageprocess;Integrated Security=True"))
            {
                conn.Open();
            using(SqlCommand cmd=conn.CreateCommand())
                {
                    cmd.CommandText = "select count(*) from [user]"; int i = (int)cmd.ExecuteScalar();
                    MessageBox.Show(i.ToString());
                }//这个括号结束的时候自动释放SqlCommand }//这个括号结束的时候自动释放SqlConnection除了using可以达到这个目的意外,try catch也是可以的。
        }

HTML

 

ASP.NET 支持三种不同的开发模式:
Web Pages(Web 页面)、MVC(Model View Controller 模型-视图-控制器)、Web Forms(Web 窗体)。

C#访问数据库 SQLsevere

增删改插 

Sqlserver数据库连接方式有多种,这里只介绍最常用的通过SqlConnection和Sqlserver数据库用户名和密码验证来进行操作数据库。
数据库连接字符串:
string connString = "data source=119.180.261.117,1433;initial catalog=anxiuyun;user id=sa;pwd=sa";
这里data source 是指数据库地址和端口号,需要注意的是地址和端口号之间是用","进行分隔的;initial catalog 是数据库名字 ;user id和pwd分别指用户名和密码。
数据库建立连接:
 SqlConnection sqlConnection = new SqlConnection(this.connString);
 sqlConnection.Open();
数据库查询:
SqlDataAdapter sqlDa = new SqlDataAdapter("select * from tb_alarm", sqlConnection);
DataTable dt = new DataTable();
sqlDa.Fill(dt);
数据库插入更新操作:
SqlCommand sqlCmd = new SqlCommand("insert into tb_scene_tb (id,scene_id) values('1','123')", sqlConnection);
sqlCmd.ExecuteNonQuery();

-----------------------------------------------------------

. NET   MVC

.NET MVC是微软官方提供的以MVC模式为基础的.NET Web应用程序(Web Application)框架。

经典MVC模式中,M是指业务模型,V是指用户界面,C则是控制器,使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。其中,View的定义比较清晰,就是用户界面。

V即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操作的方式。

M即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。

C即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

框架模式有哪些?

MVC、MTV、MVP、CBD、ORM等等;

框架有哪些?

C++语言的QT、MFC、gtk,Java语言的SSH 、SSIphp语言的 smarty(MVC模式),python语言的django(MTV模式)等等

设计模式有哪些?

工厂模式适配器模式、策略模式等等

简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。

什么是ASP.Net MVC?
HttpHandler是ASP.net的底层机制,如果直接使用HttpHandler进行开发难度比较大、工作量大。因此提供了ASP.Net MVC、ASP.Net WebForm等高级封装的框架,简化开发,他们的底层仍然是HttpHandler、HttpRequest等这些东西。比如ASP.Net MVC的核心类仍然是实现了IHttpHandler接口的MVCHandler。

ASP.NET (菜鸟教程)

ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。

ASP.NET 支持三种不同的开发模式:
Web Pages(Web 页面)、MVC(Model View Controller 模型-视图-控制器)、Web Forms(Web 窗体):

MVC 编程模式

MVC 是三种 ASP.NET 编程模式中的一种。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

  • Model(模型)表示应用程序核心(比如数据库记录列表)。
  • View(视图)显示数据(数据库记录)。
  • Controller(控制器)处理输入(写入数据库记录)。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

MVC 模式定义 Web 应用程序
带有三个逻辑层:

业务层(模型逻辑)

显示层(视图逻辑)

输入控制(控制器逻辑)

MVC

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据

Visual Studio Express 2012/2010

Visual Studio Express 是 Microsoft Visual Studio 的免费版本。

Visual Studio Express 是为 MVC(和 Web Forms)量身定制的开发工具。

Razor 服务器代码标记?? 什么东东?

一个典型的 ASP.NET MVC Web 应用程序的文件夹内容如下所示:

应用程序信息

Properties
References

应用程序文件夹

App_Data 文件夹
Content 文件夹
Controllers 文件夹
Models 文件夹
Scripts 文件夹
Views 文件夹

配置文件

Global.asax
packages.config
Web.config

App_Data 文件夹

App_Data 文件夹用于存储应用程序数据。

我们将在本教程后面的章节中介绍添加 SQL 数据库到 App_Data 文件夹。

Content 文件夹

Content 文件夹用于存放静态文件,比如样式表(CSS 文件)、图标和图像。

Visual Web Developer 会自动添加一个 themes 文件夹到 Content 文件夹中。themes 文件夹存放 jQuery 样式和图片。在项目中,您可以删除这个 themes 文件夹。

Visual Web Developer 同时也会添加一个标准的样式表文件到项目中:即 content 文件夹中的 Site.css 文件。这个样式表文件是您想要改变应用程序样式时需要编辑的文件。

Controllers 文件夹

Controllers 文件夹包含负责处理用户输入和响应的控制器类。

MVC 要求所有控制器文件的名称以 "Controller" 结尾。

Visual Web Developer 已经创建好一个 Home 控制器(用于 Home 页面和 About 页面)和一个 Account 控制器(用于 Login 页面):

Models 文件夹

Models 文件夹包含表示应用程序模型的类。模型控制并操作应用程序的数据。

我们将在本教程后面的章节中创建模型(类)。

Views 文件夹

Views 文件夹用于存储与应用程序的显示相关的 HTML 文件(用户界面)。

Views 文件夹中包含每个控制器对应的一个文件夹。

在 Views 文件夹中,Visual Web Developer 已经创建了一个 Account 文件夹、一个 Home 文件夹、一个 Shared 文件夹。

Account 文件夹包含用于用户账号注册和登录的页面。

Home 文件夹用于存储诸如 home 页和 about 页之类的应用程序页面。

Shared 文件夹用于存储控制器间分享的视图(母版页和布局页)。

Scripts 文件夹

Scripts 文件夹存储应用程序的 JavaScript 文件。

默认情况下,Visual Web Developer 在这个文件夹中存放标准的 MVC、Ajax 和 jQuery 文件:

从前端UI开始

MVC分离的比较好,开发顺序没有特别要求,先开发哪一部分都可以,这次我们主要讲解前端UI的部分。而谈到一个Web Application的UI,涉及到的无非就是html、css、 js这些东西。有兴趣的同学可以看看EsayUI。

  1. ViewBag

在View和Controller中传递数据的一种方式 (类似的方式还有ViewData、TempData), 掌握通过ViewBag在View和Controller中传递数据

  1. HtmlHelper

通过View的Html属性调用,文中以Html.BeginForm为例

4 添加动态输出

Web应用程序平台的关键时构造并显示动态输出。在MVC中。控制器的工作时构造一些数据并传递给视图,而视图则负责把他渲染成HTML。

将数据从控制器传递给视图的一种方式是使用 ViewBag (视图包)对象,他是Controller基类的一个成员。ViewBag 是一种动态对象,看可以给他赋任意属性,这些属性在随后渲染的视图中可用。下面演示了在HomeController.cs 文件中传递一些简单的动态数据。

Html.ActionLink 是HTML的辅助器方法 。MVC框架附带一组内置的辅助器方法。可以方便地用来渲染HTML的链接,文本输入,复选框以及其他内容。ActionLink一共两个参数,一个是显示文本,第二个是用户单击该连接产生的动作。此时单击该链接会报404错误,因为还没有 /Home/RsvpForm 该界面。此时,在HomeController类中添加一个“RsvpForm”的方法完成

模型绑定 与  HTML辅助器  的作用是相反的:

辅助器:模型类--->HTML元素

模型绑定:HTML元素--->模型类实例化

HtmlHelper  HTML辅助器:MVC框架附带一组内置的辅助器方法。可以方便地用来渲染HTML

using ()

@Html.BeginForm

@Html.TextBoxFor

@Html.DropDownListFor

@Html.ActionLink

HTML知识点:

表单元素(Form),input元素......

 元素的属性有:type,id,name,等。

MVC控制器中各函数的响应条件:

如:
       [HttpGet]  public ViewResult Index()
        {
            return View();
        }
       
      [HttpPost]  public ViewResult Index(GuestResponse guestResponse)
        {
            return View("Index2",guestResponse);
        }

1.第一次进入或刷新Index页面时:       [HttpGet]  public ViewResult Index()

2.已经处在index页面,并且向服务器发送(表单)数据时,即发送post请求时:

[HttpPost]  public ViewResult Index(GuestResponse guestResponse)

 语句 public string Name { get; set; }

变量Name  引出了属性property,它有两个方法,一个是get读方法,一个是set写方法:

C#中“public string Name { get; set; }”什么意思?_lzzw的学习之路-CSDN博客

Razor语句以@ 字符开始,在此例中,@model 语句声明了通过动作方法传递给该试图模型对象的类型,让我们通过@Model来引用模型对象的方法,字段和属性。

@model WebApplication2.Models.Product

    <div> 
        @Model.Name
    </div>

@{
    Layout = null;
}

HTML - div元素 <div>可以看作是封装了其他网页元素的容器和把HTML文件分割为多个单元的标签。

使用视图起始文件
在这里其实有一个问题需要解决,就是每一个视图都指定布局文件后,如果布局文件重命名了,那么必须找到引用该布局的每一个视图进行修改,这是一个庞大易错复杂的工程,不符合MVC易维护主题。这里可以通过视图起始文件实现。在“Views”文件夹下继续新建一个 _ViewStart.cshtml ,编辑新文件匹配下图:(多余内容删除)

不需要以任何方式指定希望使用的视图起始文件,MVC框架会对此文件进行定位,并自动使用其中内容。

Razor表达式,语句

 Razor 表达式能做的最简单的事就是插入数据,可以用@Model 表达式来引用视图模型对象所定义的属性方法。或使用@ViewBag表达式。

ViewBag既可以在.cs(控制器中)使用,又可以在.html中使用,他是前后端数据传递的桥梁

@: 字符阻止了Razor 将此行解释为一条 C#语句。这是Razor 默认行为,如果未以 @:开头,则认为是C#语句。

@model Razor.Models.Product
 
@{
    ViewBag.Title = "DemoExpression";
}
 
<table>
    <thead>
        <tr>
            <th>Property</th>
            <th>Value</th>
        </tr>
    </thead>
    <tbody>
        <tr><td>Name</td> <td>@Model.Name</td></tr>
        <tr>
            <td>Price</td>
            <td>@Model.Price</td>
        </tr>
        <tr>
            <td>Stock Level</td>
            <td>
                @switch ((int)ViewBag.ProductCount)
            {
                case 0:
                        @:Out of Stock
                    break;
                case 1:
                        <b>Low Stock(@ViewBag.ProductCount)</b>
                        break;
                    default:
                        @ViewBag.ProductCount
                        break;
                }
            </td>
        </tr>
        <tr>
            <td>Stock Level</td>
            <td>
                @if (ViewBag.ProductCount == 0)
                {
                    @:Out of Stock
                }
                else if (ViewBag.ProductCount == 1)
                {
                    <b>Low Stock(@ViewBag.ProductCount)</b>
                }
                else
                {
                    @ViewBag.ProductCount
                }
            </td>
        </tr>
    </tbody>
</table>
<div data-discount="@ViewBag.ApplyDiscount" data-expression="@ViewBag.Expression" data-supplier="@ViewBag.Supplier">
    包含元素具有数据属性
</div>
discount:<input type="checkbox" checked="@ViewBag.ApplyDiscount" />
expression:<input type="checkbox" checked="@ViewBag.Expression" />
supplier:<input type="checkbox" checked="@ViewBag.Supplier" />

ViewResult和ActionResult的区别

如果确认你返回的是一个视图(view),你可以直接返回类型为ViewResult。如果你并不是很清楚,或者你根本不想去理解这些东西,你可以直接返回ActionResult

 ViewBag . 变量名

无需定义,在赋值时自动定义

CSS是什么

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 [1]

CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力

HTML简单语法归纳

超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。您可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。

HTML文档的后缀名

  • .html
  • .htm

  • <!DOCTYPE html> 声明为 HTML5 文档
  • <html> 元素是 HTML 页面的根元素
  • <head> 元素包含了文档的元(meta)数据,如 <meta charset="utf-8"> 定义网页编码格式为 utf-8
  • <title> 元素描述了文档的标题
  • <body> 元素包含了可见的页面内容
  • <h1> 元素定义一个大标题
  • <p> 元素定义一个段落

HTML 不是一种编程语言,而是一种标记语言

HTML 使用标记标签来描述网页,HTML 文档包含了HTML 标签文本内容。

HTML 标签

<标签>元素内容</标签>

HTML 标签是由尖括号包围的关键词,比如 <html>

成对出现开始标签结束标签,也被称为开放标签闭合标签。

HTML 元素 = 标签+元素内容:

<p>这是一个段落。</p>

<!DOCTYPE> 声明

<!DOCTYPE>声明有助于浏览器中正确显示网页。不区分大小写。

中文编码

目前在大部分浏览器中,直接输出中文会出现中文乱码的情况,这时候我们就需要在头部将字符声明为 UTF-8 或 GBK。如:

<!DOCTYPE html>

<html> <head>

<meta charset="UTF-8">

<title> 页面标题</title>

</head>

HTML 元素语法

  • HTML 元素以开始标签起始
  • ....
  • 大多数 HTML 元素可拥有属性
  • 大多数 HTML 元素可以嵌套(HTML 元素可以包含其他 HTML 元素)

HTML 属性

  • HTML 元素可以设置属性
  • 属性可以在元素中添加附加信息
  • 属性一般描述于开始标签
  • 属性总是以名称/值对的形式出现,比如:name="value"

元素内容是可视的部分,元素属性是不可视。

查看完整的HTML属性列表: HTML 标签参考手册

 常用/常见的元素:

<html> 元素定义了整个 HTML 文档。

<body> 元素定义了 HTML 文档的主体。

标题<h1>

横线<hr>

链接<a>

段落<p>

换行<br>

等等.....

<title> 元素:

  • 定义了浏览器工具栏的标题
  • 当网页添加到收藏夹时,显示在收藏夹中的标题
  • 显示在搜索引擎结果页面的标题

HTML 样式- CSS


CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。

如何使用CSS

CSS 是在 HTML 4 开始使用的,是为了更好的渲染HTML元素而引入的.

CSS 可以通过以下方式添加到HTML中:

  • 内联样式- 在HTML元素中使用"style" 属性
  • 内部样式表 -在HTML文档头部 <head> 区域使用<style> 元素 来包含CSS
  • 外部引用 - 使用外部 CSS 文件

例子:

1.内联样式

<p style="color:blue;margin-left:20px;">这是一个段落。</p>

2.内部样式表

<head>
<style type="text/css">
body {background-color:yellow;}
p {color:blue;}
</style>
</head>

3.外部样式表

<head>
<link rel="stylesheet" type="text/css" href="mystyle.css">
</head>

图像

<img src="boat.gif" alt="Big Boat">

表格由 <table> 

列表

无特定的含义

HTML 表单

表单是一个包含表单元素的区域。

表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉列表、单选框(radio-buttons)、复选框(checkboxes)等等。

表单使用表单标签 <form> 来设置:

HTML 统一资源定位器(Uniform Resource Locators)

HTML 输出- 使用提醒

我们无法确定 HTML 被显示的确切效果。屏幕的大小,以及对窗口的调整都可能导致不同的结果。

对于 HTML,您无法通过在 HTML 代码中添加额外的空格或换行来改变输出的效果。

当显示页面时,浏览器会移除源代码中多余的空格和空行。所有连续的空格或空行都会被算作一个空格。需要注意的是,HTML 代码中的所有连续的空行(换行)也被显示为一个空格。

nvarchar和varchar使用区别

如字段值只是英文可选择varchar,而字段值存在较多的双字节(中文、韩文等)字符时用nvarchar

IEnumerable和IEnumerable<T>接口是 .NET Framework 中最基本的集合访问器。它定义了一组扩展方法,用来对数据集合中的元素进行遍历、过滤、排序、搜索等操作。

读书笔记

MVC流程示意图:

学习C#语言特性,便于简化编程,快速解决复杂的编程问题:

 

C# 属性(Property)

属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作

 规则属性:

自动属性(简化了规则属性的书写):

两者效果一致:

初始化器:简化类的对象的 构造过程:

使用初始化器{ }  :

 

 数组:

泛型集合(C++中的模板?容器?列表?字典?):

C#中类的扩展方法:有两个类,分别为类1,类2,在类2中定义一个扩展方法(函数),这个函数可以被类1的实例(对象)调用。

解决了:给那些不是你拥有的、不能直接修改的类添加方法的一种方便的办法。

类1:

类2:

 

调用:

设计成某个类的扩展方法的语法: 

上面讲了类的扩展方法,下面讲接口的扩展方法

 类可以继承类也可以继承接口,接口类似于抽象类,只有成员的声明。

接口一般一 I 起始字符来命名。

IEnumerable和IEnumerable<T>接口

IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach语句功能的实现 并支持非泛型方法的简单的迭代,IEnumerable和IEnumerable<T>接口是.NET Framework中最基本的集合访问器。它定义了一组扩展方法,用来对数据集合中的元素进行遍历、过滤、排序、搜索等操作。

学习:MVC学习笔记--IEnumerable的用法 - Fire_Dragon - 博客园

lambda表达式:

自动类型:

 匿名类型:

 执行语言集成查询LINQ:

LINQ是在类中查询数据的一种类似于SQL的语法。

 

 Visual studio解决方案是一个含有一个或多个项目的容器。

CREATE TABLE [dbo].[Products] (
    [ProductId]   INT             IDENTITY (1, 1) NOT NULL,
    [Name]        NVARCHAR (100)  NOT NULL,
    [Description] NVARCHAR (500)  NOT NULL,
    [Price]       DECIMAL (16, 2) NOT NULL,
    [Category]    NVARCHAR (100)  NOT NULL,
    PRIMARY KEY CLUSTERED ([ProductId] ASC)
);

IDENTITY属性怎么使用,作用?

MVC 的 松耦合   :

依赖项注入 DI(Dependency injection)

C#将JSON文本转换成HttpResponseMessage数据行:

HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(JsonStr, Encoding.GetEncoding("UTF-8"), "application/json") };

将自己的数据(String)转为Json字符串

至少有两种方法:

1.Serialize()

2.使用JsonReader读Json字符串:

StringWriter sw = new StringWriter();
JsonWriter writer = new JsonTextWriter(sw);
writer.WriteStartObject();
writer.WritePropertyName("input");
writer.WriteValue("value");
writer.WritePropertyName("output");
writer.WriteValue("result");
writer.WriteEndObject();
writer.Flush();

学习Json:

C#解析json文件的方法 - 方倍工作室 - 博客园

JSON语法,如何读懂Json字符串
1. JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中:名称是字符串,使用双引号表示。值可以是:数字(整数或浮点数),字符串(在双引号中),数组(在方括号中),对象(在花括号中),true/false/null。
  • 数据由分号:分隔。
  • 花括号保存对象:对象可以包含各种数据,包括数组。
  • 方括号保存数组:数组可以包含对象。

2.如果JSON中含有转义字符,则需要转义。例如文件路径中需要使用"\\"而不是"\"。例如:{ "file":"C:\\a.txt"}。

例如:

{
    "employees": [
        {
            "firstName": "Bill",
            "lastName": "Gates"
        },
        {
            "firstName": "George",
            "lastName": "Bush"
        }
    ]
}

特性

C#方法名前的方括号

1、序列化:
[Serializable]
public void 方法名(){...}

2、WebServices方法:
[WebMethod]
public void 方法名(){...}

3、Ajax(AjaxPro)方法:
[AjaxPro.AjaxMethod]
public void 方法名(){...}

4、其他还有很多,如Duwamish7里的:
[Browsable(false)]
public void 方法名(){...}

路由

控制器中类的每个公共方法被称为Action方法。

一个MVC应用程序首次运行时,会调用Application_Start()方法。这个方法随后调用了RegisterRoutes()方法。RegisterRoutes()方法创建了路由表。

  默认路由映射:

第一部分——Controller

第二部分——Controller下的Action

第三部分——名为id的参数

  所谓默认路由,表明如果不填写Controller,会默认定位HomeController,如果不填写Action,会默认调用Index方法,如果不填写id,那么默认为空字符串。

  即以下这些URL都会定位到HomeController.Index()方法,返回Index View视图。
————————————————
版权声明:本文为CSDN博主「Bboy-AJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013201439/article/details/54311305

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

干了这碗汤

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值