在asp.net中动态生成web控件

asp.net 动态添加控件 asp.net 动态添加控件,C# 代码。动态添加控制的一个小实例。希望对大家有用。。。 立即下载
 

在asp.net中动态生成web控件

 

       大多数情况下,我们在制作asp.net页面的时候,都是使用静态的形式将WEB服务器控件添加到页面中的,这种方法能满足大部分的需要。在本文中,我们主要讨论如何在WEB页面中动态生成控件并添加到指定位置,然后设置控件的相关属性,触发相关的事件。

 

       本程序中,我们打算在页面上动态生成三个控件,一个表格,一个文本框,一个标签。当文本框失去焦点时,标签将显示文本框中的内容;程序运行的时候,文本框中有一段提示文字(“输入结束后请按TAB键”),当鼠标经过该文本框时,自动清除提示文字。以上是本程序的功能介绍。

 

       下面讲解详细的操作过程:

 

1、  新建一个aspx页,名字任意取好了。

 

2、  切换到HTML视图,添加一个两行一列的表格,因为.net中画表格极不方便,所以我都是在frontpage中画好表格再把代码粘贴过来的。

 

3、  在表格的第一行和第二格各放一个PlaceHolder控件,并采用默认名称。该控件在工具箱的WEB窗体选项卡中可以找到,PlaceHolder Web 服务器控件使您可以将空容器控件放置到页内,然后在运行时动态添加、移除或依次通过子元素。该控件只呈现其子元素。

 

4、  不多说了,所有源码贴出来,我作了比较详细的注释:

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Web;

using System.Web.SessionState;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;

 

namespace TeachShow.Test

{

    ///

    /// WebForm1 的摘要说明。

    ///

    public class WebForm1 : System.Web.UI.Page

    {

        protected System.Web.UI.WebControls.PlaceHolder PlaceHolder1;

        protected System.Web.UI.WebControls.PlaceHolder PlaceHolder2;

        private Label label=new Label();

        private TextBox textbox=new TextBox();

   

        private void Page_Load(object sender, System.EventArgs e)

        {

            // 在此处放置用户代码以初始化页面

            Table tb = new Table();//创建一个表格

            tb.BorderWidth=Unit.Parse("1");

           

            tb.Width = Unit.Parse("100%");

            for (int j=0;j<10;j++)

            {

                TableRow tr = new TableRow();//创建一行

                TableCell cell1 = new TableCell();//创建单元格,也就是第一列

                cell1.Text=j.ToString();//设置单元格内的文本

                tr.Cells.Add(cell1);//添加到行中

 

                TableCell cell2 = new TableCell();//创建第二列

                cell2.Text=(j*j).ToString();

                tr.Cells.Add(cell2);               

 

                tb.Rows.Add(tr);//添加到表格中

 

            }

            this.PlaceHolder2.Controls.Add(tb);

 

            /////////////////////////////////////////

            textbox.Text="输入结束后请按TAB键";//程序运行时文本框内的提示文本

            textbox.ID="t";//给文本框起个名字

            textbox.Width=200;//设置宽度

            textbox.Height=20;//设置高度

            textbox.AutoPostBack=true;//响应事件的条件

            textbox.TextChanged+=new EventHandler(textbox_TextChanged);//添加事件,在.net中,按TAB自动生成

            textbox.Attributes.Add("onmouseover","t.value=''");//给文本框添加一个javascript事件,当鼠标从文本框中移过时自动清除文本框内的提示内容

 

            this.PlaceHolder1.Controls.Add(textbox);//添加

 

            ////////////////////////////////////////

           

            this.PlaceHolder1.Controls.Add(label);//此处将标签添加到PlaceHolder中

 

        }

 

        #region Web 窗体设计器生成的代码

        override protected void OnInit(EventArgs e)

        {

            //

            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。

            //

            InitializeComponent();

            base.OnInit(e);

        }

       

        ///

        /// 设计器支持所需的方法 - 不要使用代码编辑器修改

        /// 此方法的内容。

        ///

        private void InitializeComponent()

        {   

            this.Load += new System.EventHandler(this.Page_Load);

 

        }

        #endregion

 

        private void textbox_TextChanged(object sender, EventArgs e)

        {

            this.label.Text=textbox.Text;//事件响应方法.当文本框失去焦点时将标签设成和文本框同样的内容.

        }

    }

}

在_Web_Form_动态建立控件的正确方法 立即下载

相关推荐

asp.net 动态生成控件并获取其值

代码如下://动态生成三个控件 protected void Button1_Click(object sender, EventArgs e) { for (int i = 0; i < 3; i++) { TextBox t = new TextBox(); t.ID = string.Format(“newTextBox{0}”,i); Panel1.Controls.Add(t); } ListControlsInPanel(); } 代码如下://获取动态生成的控件的值 protected void Button3_Click(object sender, EventArgs e)

Web动态添加控件

好像问动态添加控件的人很多,问题大多集中(1)动态添加的按钮不能提交(2)动态添加的文本框取不到值(3)动态添加的控件页面刷新后消失(4)动态添加的控件页面刷新重复添加(5)动态添加的控件不知道怎么移除问题百出,但是其实这些都是非常简单的,可能疏忽了一点两点,补充以前写的2篇文章(以前写的比较乱)这个页面实现:点击添加按钮-》添加一个文本框一个提交按钮-》点击提交按钮输出文本框值点击删除按钮(就是

geruger的专栏 1885

UOS的ARM机编译QT5.14.2记录

我需要的qt版本是Qt5.14.2,所以选择编译Qt5.14.2源码;几个月前尝试了编译一次,当时编译过程中出现了报错,当时时间很紧最后安装的默认版本来使用,最近有时间重新进行了一次编译,历经3个星期(4G的内存)终于解决了各种坑,编译成功了,现在将编译过程中遇见的一些坑记录一下,方便日后能记得这一次可恶的编译过程,如有描述欠缺的地方,还希望各位大佬给点意见指导指导🙏。

NiF693zzz的博客 1618

asp.net动态生成控件及访问控件

asp.net动态生成控件的方法: 1.在aspx页面放一个Panel控件 2.代码如下: privatevoidPage_Load(objectsender,System.EventArgse) { //在此处放置用户代码以初始化页面 if(Session["p_useri...

weixin_33829657的博客 148

为什么AI时代的优秀组织,都在学习Meta的Pod结构?看完秒懂

当AI技术重塑产业格局,企业协作正面临前所未有的挑战——层级繁琐、跨部门内耗、迭代滞后,传统组织模式早已难以跟上技术革新的步伐。作为全球AI原生企业的标杆,Meta独创的Pod组织模式,用“小而美”的自治单元打破困局,成为AI时代高效协作的典范。本文将从定义、运作、价值到未来演进,全面拆解Pod模式,为企业组织变革提供可参考的思路与路径。德鲁克曾说:“组织的功能就是让平凡的人做平凡的事。”而Meta Pod打破这一局限,通过去中心化、指标导向、跨界融合,让优秀人才产生“化学反应”。

Kiss_AIHR的博客 1178

PCB布线避坑指南:晶振布局的5个致命错误(附正确示例图)

本文深入解析PCB布线中晶振布局的5个致命错误,包括底层布线、电容布局、地平面处理等关键问题,并提供实战解决方案。通过真实案例和量化数据,帮助硬件开发者避免常见陷阱,提升电路稳定性和性能。特别针对晶振这一高敏感元件,给出布线参数黄金法则和三维避让原则。

weixin_29215391的博客 428

基于ASP.NET的Web动态控件创建

摘要:Web设计中,有很多场合,页面的控件要动态创建甚至只能动态创建,这样可以增加页面的灵活性,但是给程序员带来了一些麻烦,比如要使用动态创建的控件,怎么使用,都是要求解决的问题,本文基于ASP.NET,简要介绍了页面的控件如何动态创建,同时也介绍了怎么使用这些动态创建的控件的方法。   前言:  自从Microsoft在2000年推出了.NET framework以来,给基于interNET编程

zgqtxwd的专栏 491

实战:如何用MIPI CSI-2高效传输RAW10图像数据(附带宽优化技巧)

本文深入探讨了MIPI CSI-2协议在RAW10图像数据传输中的高效应用,详细解析了4像素5字节打包机制及其带宽优化技巧。通过动态Lane分配、位深度自适应压缩和虚拟通道交错传输等实战方法,显著提升传输效率,适用于IoT摄像头开发等低功耗场景。

css33的专栏 732

ASP.NET动态控件生成

实例——输入文本,增加带有此文本的复选框 1、PageLoad方法 最终效果 .aspx.cs代码如下: protected void Page_Load(object sender, EventArgs e) { //从暂存服务器控件把之前全部输入记录提取,并新建复选框 //可以避免一重新加载界面,就全部消失 if (Te...

xiaoLongww的博客 823

打开LWIP_DEBUG的打印信息调试

在lwip 2.1.2的版本,打开的debug 调试的步骤: 1.在debug.h 文件中找到debug打印的定义 默认LWIP_DEBUG这个宏没有定义, 2.在lwipopt.h 文件中或者其他文件定义 一下LWIP_DEBUG这个宏, 3.在opt.h 中可以打开各种宏的调试信息, /* --------------------------------------- ---------- Debugging options ---------- ---------...

haidscs的博客 9880

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

asp.net_动态创建页面跳转控件(HyperLink)

今天课堂上做了一个随堂练习,写个博客做记录。 动态创建页面跳转控件HyperLink 一、先来说一下页面跳转的几个方法: 1.a标签超链接 2.Response.Redirect重定向 3.Server.Transfer,也是重定向 2与3的区别(老师笔记) Response.Redirect Server.Transfer 是否转向其他站点 是 否 是否可带QueryString参数 是 否 执行效率 相对低 相对高 是否存在第三方控件的冲突BUG 无 有 浏览器是否显示

BeJav 2289

智能汽车嘚啵嘚 --- 智能座舱第七稿:智能座舱的升级OTA

智能汽车嘚啵嘚 --- 智能座舱第七稿:智能座舱的升级OTA

Soly_kun的博客 414

Asp.net web form 动态生成控件的注意事项

Asp.net web form 动态生成控件的注意事项 Asp.net页面生命周期 页面初始化 Page_Init 加载View State LoadViewState 回发数据处理 LoadPostData 页面加载 Page_Load 回发通知 RaisePostDataChangedEve...

cxu123321的博客 360

Lasso的原理及其与其他特征选择方法的比较进行阐述,然后讨论Lasso优点、缺点以及应用场景,最后给出了代码实例

在机器学习领域中,特征选择(feature selection)是指在模型训练前对数据集进行分析,选择其中有助于预测目标变量或影响模型性能的特征,去除不相关或冗余的特征,提升模型的泛化能力。而Lasso回归是一种很流行的用于特征选择的方法之一。Lasso回归(又称LASSO,least absolute shrinkage and selection operator)是一种线性模型中的特征选择方法。

AI天才研究院 3051

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ASP.NET动态生成控件

前两天写了个模块,需要从数据库读出数据在根据数据动态生成WEB控件。因为以前没写过,所以遇到一个问题,调了很久才调通。原来动态生成控件每次刷新页面都得在Page_Load()方法里面重现(生成控件代码不能写在if(!PageIsPost){}里面),不然在其他地方拿不到生成控件的值。用FindControls方法取控件值会抛出控异常。下面是Page_Load()事件里面的部分代...

aokzci8966的博客 252

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

在asp.net中动态生成web控件【文章来源:开店乐KaiDianLe.Com】

        大多数情况下,我们在制作asp.net页面的时候,都是使用静态的形式将WEB服务器控件添加到页面中的,这种方法能满足大部分的需要。在本文中,我们主要讨论如何在WEB页面中动态生成控件并添加到指定位置,然后设置控件的相关属性,触发相关的事件。        本程序中,我们打算在页面上动态生成三个控件,一个表格,一个文本框,一个标签。当文本框失去焦点时,标签将显示文本框中的

无序代码 1032

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

[ASP.NET 教程] 二. Web Forms

1. 服务器端处理虽然form.html能够通过post或者get方法产生回发,但是它仍然不能够处理用户输入,仍然是一个静态页面,现在我们需要在服务器端处理用户输入及回发。在服务器端处理用户输入有很多方式,因为本文是ASP.NET教程,故只谈ASP.NET。ASP.NET使用Web Form来描述Web页面,通过面向对象的编程方式,配合.NET Framework,使Web应用程序设计变得更简单,

zeta's blog 1707

ASP.NET动态生成控件(转)

前两天写了个模块,需要从数据库读出数据在根据数据动态生成WEB控件。因为以前没写 过,所以遇到一个问题,调了很久才调通。原来动态生成控件每次刷新页面都得在Page_Load()方法里面重现(生成控件代码不能写在 if(!PageIsPost){}里面),不然在其他地方拿不到生成控件的值。用FindControls方法取控件值会抛出控异常。下面是Page_Load()事件里面的部分代码: SqlC...

weixin_30539835的博客 144

ASP.NET - Panel Web 服务器控件概述

       Panel Web 服务器控件在 ASP.NET 网页内提供了一种容器控件,您可以将它用作静态文本和其他控件的父级。 一、背景 可以将 Panel 控件用作其他控件的容器。当以编程方创建内容并需要一种将内容插入到页中的方法时,此方法尤为适用。以下部分描述了可以使用 Panel 控件的其他方法。1、动态生成的控件的容器Panel 控件为在运行时创建的控件提供

dodream的专栏 1537

Asp.net 实现验证码功能的Web控件

Asp.net的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl 等都不一样,几乎是完全的面向对象设计!代码的复用就是其 中差异较大的特点之一,Asp.net除了可以用Include以外,还提供 了比较有特点的Web控件,包括:Ascx形式和带设计时支持的控 件[本文属于后者],为了熟悉这些新概念,我自己写了个Web控件。 在实际项目中运行使用良...

anmi5580的博客 185
下一篇: J2me游戏开发实例讲解(华容道)
shearlock
博客等级 码龄24年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值