ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu )

一款自写的VB可分级的TreeView树形控件 一款自写的VB可分级的TreeView树形控件,API编程技术,钩子技术,自定义控件,完全超乎你的想象,很好的学习代码 立即下载

TreeView 控件关键属性

CheckedNodes                 声明被选择的单个或者多个节点
ExpandDepth                   声明TreeView控件展开的深度
Nodes                               TreeNodeCollection 类型的节点集合
SelectedNode                  当前被选择的节点
ShowCheckBoxes           声明是否显示复选框
ShowExpandCollapse    声明展示/折叠状态
ShowLines                      声明节点间是否以线连接
LevelStyles                     指定每个层次的节点的样式
NodeStyle                       指定节点的默认样式
RootNodeStyle              指定根节点的样式
LeafNodeStyle               指定子节点的样式
SelectedNodeStyle        指定选定节点的样式
HoverNodeStyle            指定当鼠标移在节点上方时的样式
ImageUrl properties       指定表示展开/折叠的图片的URL路径
TreeNode关键属性
Checked                             标明节点上的复选框的选择状态
ImageUrl                             标明节点上所用图片的URL路径
NavigateUrl                       当单击节点时所要导航到的URL路径
SelectAction                     无导航节点被单击时所要执行的动作
Selected                             标明当前节点是否被选择的节点
ShowCheckBox                 标明当前节点是否显示复选框
Text                                    节点上的文字
TreeView 事件
CheckChanged               当复选框被选择或者清除选择时的所触发的事件
SelectedNodeChanged  当选择的节点发生改变时所触发的事件
TreeNodeCollapsed       当分支被折叠时所触发的事件
TreeNodeExpanded       当分支被展开时所触发的事件
TreeNodeDataBound    当节点被绑定到数据源时所触发的事件
TreeNodePopulate*       Fired when a PopulateOnDemand node needs content
* Only fired on server if EnableClientScript="false"
使用 SelectedNodeChanged事件
<asp:TreeView ID="Tree" OnSelectedNodeChanged="OnUpdate" RunAt="server">
  
<Nodes>
    
  
</Nodes>
</asp:TreeView>
  .
  .
  .
<script language="C#" runat="server">
void OnUpdate (Object sender, EventArgs e)
{
    
// Get the text of the selected node
    string text = Tree.SelectedNode.Text;
      
}

</script>
按需装载节点
<asp:TreeView OnTreeNodePopulate="OnPopulate" EnableClientScript="false"
  RunAt
="server">
  
<Nodes>
    
<asp:TreeNode Text="Populate this node on demand"
      PopulateOnDemand
="true" RunAt="server" />
  
</Nodes>
</asp:TreeView>
  .
  .
  .
<script language="C#" runat="server">
void OnPopulate (Object sender, TreeNodeEventArgs e)
{
    
// Called first time the populate-on-demand node is expanded
    TreeNode node = new TreeNode ("This node added dynamically");
    e.Node.ChildNodes.Add (node);
}

</script>
Menu 控件关键属性
Items                                          MenuItemCollection 类型的菜单项的集合
ItemWrap                                  Specifies whether menu item should wrap
Orientation                                标明菜单是纵向排列还是横向排列
SelectedItem                             标明当前选择的菜单项
StaticStyle properties              标明静态菜单的样式
DynamicStyle properties        标明动态菜单的样式
MenuItem 控件关键属性
ImageUrl                                    菜单项上所显示图片的URL路径
NavigateUrl                              当菜单项单击时所要导航的目标路径
Selected                                    标明当前菜单项是否已经被选中
Text                                           菜单项上的文字 (显示给最终用户)
ToolTip                                    当光标暂停或者移过菜单项时所显示的提示文本
Value                                         菜单项的实际值
Menu事件
MenuItemClick  当菜单项被单击时所触发的事件
MenuItemDataBound 当菜单项被绑定到数据源时所触发的事件
使用 MenuItemClick事件
<asp:Menu  OnMenuItemClick="OnClick" RunAt="server">
  
<Items>
    
  
</Items>
</asp:Menu>
  .
  .
  .
<script language="C#" runat="server">
void OnClick (Object sender, MenuEventArgs e)
{
    
// Get the text of the selected menu item
    string text = e.Item.Text;
      
}

</script>
TreeView控件和 Site Maps 关系
<asp:SiteMapDataSource ID="SiteMap" RunAt="server" />
<asp:TreeView DataSourceID="SiteMap" RunAt="server" />
Menus控件和 Site Maps 关系
<asp:SiteMapDataSource ID="SiteMap" RunAt="server" />
<asp:Menu DataSourceID="SiteMap" RunAt="server" />
在配置文件中修改文件名
<configuration>
  
<system.web>
    
<siteMap>
      
<providers>
        
<remove name="AspNetXmlSiteMapProvider" />
        
<add name="AspNetXmlSiteMapProvider"
          type
="System.Web.XmlSiteMapProvider, System.Web, "
          siteMapFile
="Acme.sitemap" />
      
</providers>
    
</siteMap>
  
</system.web>
</configuration>
<siteMapNode> 属性
description      节点的描述信息
roles                 指定当前项对哪些角色是可见的*
title                   当前项的标题
url                    当前项导航的目标路径
Security Trimming
<siteMap>
  
<siteMapNode title="Home" description="" url="default.aspx">
    
<siteMapNode title="Announcements" url="Announcements.aspx"
      description
="Information for all employees" /> 任何人均可见
    
<siteMapNode title="Salaries" url="Salaries.aspx"
      description
="Salary data" roles="Managers,CEOs" /> 只有Manager
和CEO权限的可见
  
<siteMapNode>
</siteMap>
使 Security Trimming生效
<configuration>
  
<system.web>
    
<siteMap>
      
<providers>
        
<remove name="AspNetXmlSiteMapProvider" />
        
<add name="AspNetXmlSiteMapProvider"
          type
="System.Web.XmlSiteMapProvider, System.Web, "
          securityTrimmingEnabled
="true"
          siteMapFile
="web.sitemap" />
      
</providers>
    
</siteMap>
  
</system.web>
</configuration>
SiteMapDataSource属性
Provider                               用来获得站点导航数据的Provider
SiteMapProvider                用来获得站点导航数据的Provider的名称
ShowStartingNode             指定显示为根节点的项
StartFromCurrentNode     指定开始节点是否是根节点(false)或者是当前节点(true)默认 = false
StartingNodeOffset            使用层次来指定开始节点 (default = 0)
StartingNodeUrl                 使用URL来指定开始节点
隐藏Site Map根节点
<asp:SiteMapDataSource ID="SiteMap" ShowStartingNode="false"
    RunAt
="server" />
<asp:TreeView DataSourceID="SiteMap" RunAt="server" />
SiteMapPath控件关键属性
CurrentNodeStyle             当前节点的样式
CurrentNodeTemplate     当前节点的HTML模板
NodeStyle                          非当前节点的样式
NodeStyleTemplate        非当前节点的HTML模板
PathSeparator                  分隔符所使用的文字 (默认 = ">")
PathSeparatorStyle           分隔符的样式
PathSeparatorTemplate  分隔符所使用的HTML模板
RootNode                         属性用来鉴别根节点
CurrentNode                    属性用来鉴别当前节点
使用 Site Map API
// Write the title of the current node to a Label control
Label1.Text = SiteMap.CurrentNode.Title;

// Write the path to the current node to a Label control
SiteMapNode node = SiteMap.CurrentNode;
StringBuilder builder 
= new StringBuilder (node.Title);

while (node.ParentNode != null) {
    node 
= node.ParentNode;
    builder.Insert (
0, " > ");
    builder.Insert (
0, node.Title);
}

  
Label1.Text 
= builder.ToString ();

 

VB TreeView控件实现多级树状菜单. 就是一个VB TreeView控件的用法,代码不多,很容易看懂,适合新生们看看。 立即下载

相关推荐

asp.net动态生成js导航菜单的方法

非常抱歉,上传传错误东西了。根据用户的权限(datatable)数据动态生成导航菜单。如果不能用,你可以q我。

[前端]AdminLTE 侧边栏三级菜单栏实现 解决点击子菜单侧边栏折叠

1.三级菜单栏 用二级嵌套 <ul class="sidebar-menu" style="" id="nav"> <li class="treeview" id="nav-collection"> <a href=""> <i class="fa fa-anchor"></i><span>一级标题1</span> <span class=

HUGG_dajingzi的博客 2425

Chroma向量数据库实战:用Python快速搭建本地知识库(附中文诗词检索案例)

本文详细介绍了如何使用Chroma向量数据库和Python快速搭建本地知识库,并附有中文诗词检索的实战案例。通过解析核心概念、数据准备、向量化及智能检索实现,展示了Chroma在处理中文语义搜索时的轻量级与易用性,为开发者构建AI应用原型提供了实用指南。

weixin_29221753的博客 480

【转】WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu

一.前言   申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等。   本文主要内容: 菜单Menu的自定义样式; 右键菜单ContextMenu的自定义样式; 树控件TreeView的自定义样式,及右键菜单实现。 二.菜单Menu的自定义样式   自定义菜单样式的效果图:   Menu和ContextMenu样式本身很简单,他们最主要的部分...

weixin_33962923的博客 1393

【项目案例】前后端分离项目 【Web图书管理系统 】SpringBoot + Vue + Element UI + Mysql

Web图书管理系统

激流丶的博客 5397

基于TI C2000的CCS安装与工程创建完整示例

手把手演示基于TI C2000系列的CCS安装过程及首个工程创建步骤,涵盖环境配置与常见问题处理,助力快速上手嵌入式开发,ccs安装和工程搭建不再难。

weixin_42476987的博客 967

TreeView和Menu的用法

TreeView和Menu都是用于导航,且与数据库绑定时的用法也极为相近,下面给出两个实例,请比较业务层的绑定方法。 1. Tree.aspx1. Tree.aspx@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree.aspx.cs" Inherits="NavTree"    EnableViewState="fals

690

MAPPO实战:从理论到代码的协作智能体训练指南

本文详细介绍了MAPPO算法在多智能体协作训练中的实战应用,从理论基础到代码实现全面解析。通过对比PPO与MAPPO的差异,深入讲解CTDE框架、网络架构设计、参数调优等关键环节,并提供实际项目中的调参经验和常见问题解决方案,帮助开发者快速掌握这一强化学习前沿技术。

weixin_42561040的博客 265

TreeView 和 Menu 的用法

TreeView和Menu都是用于导航,且与数据库绑定时的用法也极为相近,下面给出两个实例,请比较业务层的绑定方法。 1. Tree.aspx 1. Tree.aspx &lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="Tree.aspx.cs" Inherits="NavTree"     EnableView...

weixin_33875564的博客 347

流体动力学仿真软件:XFlow_(20).案例研究:声学仿真

在流体动力学仿真软件中,声学仿真是一个重要的应用领域。通过数值模拟,工程师和科研人员可以预测和分析流体系统中的声学现象,如气动噪声、声波传播和声场分布。这些仿真结果对于优化设计、降低噪声水平和提高系统性能具有重要意义。本节将详细介绍如何在流体动力学仿真软件中进行声学仿真,包括声学模型的选择、参数设置、后处理分析等内容,并通过具体的案例来说明这些步骤。

kkchenjj的博客 902

AUTOSAR进阶图解==>AUTOSAR_EXP_CDDDesignAndIntegrationGuideline

本文档提供了AUTOSAR架构中复杂驱动(CDD)的设计与集成指南。CDD作为非标准化的软件实体,位于复杂驱动层,实现传感器评估、执行器控制、微控制器访问等特殊功能。文档详细阐述了CDD的架构特点、设计建议(包括文档要求、文件结构、接口描述等)以及与其他模块(RTE、库、标准BSW等)的集成方式。特别强调了CDD在多核系统和MCAL层中的实现考量,为开发人员提供了从文档规范到代码实现的全方位指导,确保CDD在保持AUTOSAR兼容性的同时满足特殊功能需求。

一名留德华的,康德的信徒的,专注于汽车电子领域的博客 1887

ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu

TreeView 控件关键属性CheckedNodes                 声明被选择的单个或者多个节点ExpandDepth                   声明TreeView控件展开的深度Nodes                               TreeNodeCollection 类型的节点集合SelectedNode                  当

hanbb1982的专栏 909

ue 打包linux程序 在windows系统 2026

ue 打包linux程序 在windows系统 2026

jacke121的专栏 371

ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu )

TreeView 控件关键属性 CheckedNodes 声明被选择的单个或者多个节点ExpandDepth 声明TreeView控件展开的深度Nodes TreeNodeCollection类型的节点集合SelectedNode...

aiqixiao2017的博客 154

Transformer 跨界物理建模:探索模拟动态物理系统方法与实践(PINN、流体力学、有限元)

是一个由 Nicholas Zabaras 团队开发的开源项目,托管于 GitHub,旨在将 Transformer 模型(最初在自然语言处理领域大获成功)应用于物理系统的建模与预测。该项目基于论文 ​*“Transformers for Modeling Physical Systems”*​(Neural Networks, 2022),探索了深度学习中的 Transformer 架构如何通过自注意力机制和 Koopman 嵌入来模拟动态物理系统。

源代码杀手的博客 1191

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu)

TreeView 控件关键属性CheckedNodes                 声明被选择的单个或者多个节点ExpandDepth                   声明TreeView控件展开的深度Nodes                               TreeNodeCollection 类型的节点集合SelectedNode                

WesternFlu的专栏 1132

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ASP.NET 2.0构建动态导航的Web应用程序(TreeView和Menu ) (海东的技术资料)

TreeView 控件关键属性 CheckedNodes 声明被选择的单个或者多个节点ExpandDepth 声明TreeView控件展开的深度Nodes TreeNodeCollection类型的节点集合SelectedNode...

129

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

深度学习工具包 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")

上一篇: 几个高效、简洁的字符处理函数
下一篇: 利用javascript获取Asp.net网页控件并检验网页输入的简单办法(从服务器获取客户端ID)
UniMagic
博客等级 码龄20年 24粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UniMagic

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值