ASP.NET Panel 控件用于将一组控件组织在一起,并可以通过控件的 Visible 属性来控制它们的可见性。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163538.html原文链接:https://javaforall.cn
转载自:ching126,http://blog.csdn.net/chenhongwu666/article/details/41392529
这篇文章经典,看过之后大受启发。值得一看!看来ASP.NET跟JSP其实是一样的,本质上没区别,ASP.NET能做到的JSP一样可以做到,反之亦然。只不过ASP.NET的框架看起来先进一点,不过JSP也在发展,似乎也出现了类似ASP.NET的框架。 一、服务器脚本基础介绍 首先,我们先复习一下Web服务器页面的基本执行方式: 1、 客户端通过在浏览器的地址栏敲入地址来发送请求到服务器端 2、 服务器接收到请求之后,发给相应的服务器端页面(也就是脚本)来执行,脚本产生客户端的响应,发送回客户端 3、 客户
一、此文是Code Project社区2010年4月ASP.NET板块的最佳文章,说明了此文的份量;
开篇:上一篇我们了解了所谓的请求处理管道,在众多的事件中微软开放了19个重要的事件给我们,我们可以注入一些自定义的业务逻辑实现应用的个性化设计。本篇,我们来看看WebForm模式下的页面生命周期。
在asp中的OnClick和在Html里的OnClick是不一样的,前者是ASP中的,所以点击触发的是服务器事件,后者是客服端事件,当然在ASP中也有客户端的,OnClientClick事件,它在编译后就是HTML里的OnClicK事件。
Datagrid 控件是 Microsoft® ASP.NET 中功能最强、用途最广的 Web 控件之一,这一点已经得到了 ASP.NET 权威人士的认同。虽然 Datagrid 控件易于使用,但同样易于给使用者带来麻烦。以下是许多人所犯的一些错误,这些人包括从初学者到富有经验的 .NET 专家。您可以看到许多苦闷的使用者在 ASP.NET 新闻组和论坛就这些错误提出问题。遵循本文概述的相当简单的步骤,可以帮助您避免这些错误,并节约大量的开发时间。
ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果。其中的UpdatePanel就是设置页面中异步局部更新区域,它必须依赖于ScriptManager存在,因为ScriptManger控件提供了客户端脚本生成与管理UpdatePanel的功 能。
今天也不知道写不写的完了,最近闲下来了,却感冒了,早上起来都不会说话了,不过幸亏咱不是靠嘴皮子过活了,哎~~~~窃喜吧 上一篇简单写到UpdatePanel的一些好处和坏处,这一篇呢,就细致的认识一下UpdatePanel这个控件,并合理的使用它 UpdatePanel的一些属性 : RenderMode __Block(默认值):设定UpdatePanel使用DIV来圈出要跟新的区域 __Inline:设定UpdatePanel使用span来。。。。。。 UpdateMode
Asp.net 2.0中新增的gridview控件,是十分强大的数据展示控件,在前面的系列文章里,分别展示了其中很多的基本用法和技巧(详见< ASP.NET 2.0中Gridview控件高级技巧>)。在本文中,将继续探讨有关的技巧。
ASP.NET页面生命周期——理解:重中之重!!! 1.基本概念:所谓的页面生命周期,指的是一个ASP.NET页面类对象从初始化到销毁经过的步凑过程; 2.大致步凑: (1)初始化:PreInit,Init,InitComplete (2)加载数据和页面:LoadState,ProcessPostData,PreLoad,Load,ProcessPostData(第二次)... (3)触发事件:ChangedEvents PostBackEvent (4)保存状态并呈现页面:SaveState,SaveStateComplete,Render 3.步凑详解: ProcessRequestMain-> PreInit-PerfromPreInit()->预初始化:准备初始化页面控件,设置皮肤; Init-InitRecursive(null)->页面对象初始化; InitComplete(OnInitComplete-EventArgs.Empty)->页面对象初始化完成:加载ViewState,还原控件状态,登记用户触发的事件; if(this.IsPostBack) { LoadState-LoadAllState():加载ViewState->ProcessPostData-ProcessPostData(this._requestValueCollection,true):还原控件状态 } ->PreLoad-OnPreLoad(EventArgs.Empty)->Load-LoadRecursive()-> if(this.IsPostBack) { ProcessPostData Second Try-ProcessPostData(this._leftoverPostData,false)->Raise ChangedEvents-RaiseChangedEvents()->Raise PostBackEvent -RaisePostBackEvent(this._requestValueCollection);):触发控件事件 } ->SaveStateComplete-OnSaveStateComplete(EventArgs.Empty):保存页面和控件数据到ViewState-> Render->RenderControl(this.CreateHtmlTextWriter(this.Response.Output)):生成最终HTML代码
前言 本篇记录的是Asp.net页面生命周期,也就是管道模型的最末端HttpHandler的生命周期。(Page继承了IHttpHandler接口。想了解管道模型,请参考asp.net管道模型(管线模型)之一发不可收拾)。如有不足请大家指出^_^!! 本篇主要参考:ASP.NET编程模型之页面生命周期十一步详解 ASP.NET编程模型之ASP.NET页面生命周期图解 《亮剑.net 深入体验与实战精要》 正文
UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加几个UpdatePanel控件和一个ScriptManager控件就可以自实现一.
本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
在90年代初,Microsoft为Web程序员提供的ActiveServerPages(ASP运维
原帖地址:http://www.cnblogs.com/caviare/archive/2007/09/21/901500.html
使用ASP.NET中的代码绑定技术来使得代码重用变得简单可行。我们发现,利用代码绑定技术我们可以容易的将我们的代码和内容分离开来,利用它可以建立可重用的代码,只是这种技术本身也存在着一些局限性。在本文中,我们将会一同探讨另外一种新的ASP.NET技术:用户控件。 什么是用户控件(User Controls)? 为了能更好的理解用户控件的重要性,我们先来看看一段小小的“历史”。在以前的ASP当中,可重用的技术实现选择是相当受限制的。许多的开发者一般都是借助将公共的常用的子过程放到那些包含文件当中的做法来实现一定的所谓代码重用的。比如,如我们想要在许多的ASP页面当中现实一个下拉列表框,我会在一个包含文件当中建立一个函数,样子如下所示: Function GetListBox(asSelectedItem) '为HTML的选择控件建立字符串 '返回这个字符串 End Function 当然,这样的做法的确在一定程度上做到了重用,但是为了能做到更加通用性,你不得不要增加更多的参数。为了使得类似上面的你需要整理的代码得以正常工作是困难的,因为要达到提供它的通用性(可重用性),你大概不得不去修改这些已经存在的代码,以便使得他们也能在新的环境下正常工作。 IIS5中的VBScript5.0增加了建立类的功能。这就使得我们可以通过一个较多面向对象的方式来实现可重用的代码。 Class ComboBox Property Let ControlName(vData) . End Property <More properties and methods here> End Class 这样做会稍微好一些,但是开发者仍旧需要被迫去编写那些函数,以便返回HTML代码。而且,他也没有能力操纵那些类的实例对象的事件。为了能做到操作事件,开发者不得不建立一些COM组件,而后者则增加了应用程序的额外的复杂度。 有了ASP.NET,我们拥有了一个新的简单的工具来编写可重用的代码—用户控件。用户控件(也叫pagelets)提供了这样一种机制,他使得我们可以建立能够非常容易的被ASP.NET页面使用或者重新利用的代码部件。一个用户控件也是一个简单的ASP.NET页面,不过它可以被另外一个ASP.NET页面包含进去。在你的ASP.NET应用程序当中使用用户控件的一个主要的优点是用户控件的支持一个完全面向对象的模式,使得你有能力去捕获事件。而且,用户控件支持你使用一种语言编写ASP.NET页面其中的一部分代码,而使用另外的一种语言编写ASP.NET页面另外一部分代码,因为每一个用户控件可以使用和主页面不同的语言来编写。 建立一个用户控件 在建立你自己的用户控件之前,你也许想知道在你的web页面中哪些可见的对象是能够重用的好的候选者。能可能的是,你将会在你的站点上的不止一个页面上需要使用融合的用户控件。一旦你开始不断的思考你的控件的结构,你就已经做好的开始的准备。在我们的例子当中,我们将要建立一个简单的搜索的控件,用来搜索SQL Server2000中的数据库Northwind。我们的搜索控件可以使得开发者快速的为一个web页面增加搜索能力。 建立用户控件的第一步是建立一个.ascx文件。这是用户控件需要的文件扩展名。在一个一个.ascx文件中不能包含head,form,或者body标签,因为包含此.ascx文件的.aspx文件已经包含了这些标签。一个.ascx文件只能包含方法,函数,以及和用户控件相关的内同。 在建立一个.ascx文件之后,我们想要为用户控件增加一些可视的代码。在一个用户控件当中可以包含所有的web控件。在我们的例子当中,搜索控件需要拥有一个标签,一个文本框以及一个按钮。我们首先加入这些web控件,因为我们的整个代码当中会涉及到这些对象。下面是具体的代码: <asp:Label id=lblSearch runat="server" text="Caption"></asp:Label> <asp:TextBox id=txtSearch runat="server"></asp:TextBox> <asp:Button id=cmdSearch runat="server" Text="Search" ></asp:Button> 在用户控件中有一件很酷的事情是,你可以定义你自己的属性。在我们的例子当中,我们会定义如下属性: 。LabelText—描述显示给用户的搜索条件 。ConnectiongString---用来联接到数据库的连接字符串 。ResultSetView—包含了搜索结果的数据记录集 。
开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行走于天下。但这样真的就可以走一辈子吗?实际上,ASP.Net经常被喷的诟病就在于WebForm以及只会拖控件的ASP.Net程序员,往往大型互联网系统也没有采用WebForm的模式进行开发。但是,WebForm并不是一无是处,而是我们没有用好,还有很多东西我们知其然不知其所以然,现在我们就来对这些平时所不注意但又十分关键的东西一探究竟。
对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定。如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定。为了验证这种想法,我写了一个小小的组件。这个小玩意仅仅是我花了两个小时写的,其中还有很多问题没有解决,比如对于空值的处理,特殊控件属性值的HTML编码问题,以及频繁反射的性能问题,仅仅演示一种解决思路而已。本篇着重介绍如何通过这个组件来解决我们在进行数据绑定过程中的常见问题,下篇会介绍它的设计。[源代码从这里下载] 目录:
我们知道DataGrid是非常强大的一个ASP.NET组件,我们可以用它表示非常丰富的信息.在论坛里经常可以看见一些网友问一些关于该控件的问题,我虽不是什么高手但是对DataGrid还是有一些了解,加上我比较喜欢学习所以我今天就将DataGrid和CheckBox的组合使用做一个简单的描述.我们可能在写程序的时候都遇到这种情况:需要选择一个列表的所有项或者取消所有项的选择来删除这些列以及如何给用户一个提示信息是否要删除(改功能我在相关文档里描述过了),我也遇到这个问题.我解决它有2个方案分别描述如下: 解
作者:苏红超 导读 代码绑定是ASP.NET提供的一个重要的新技术。本文将会为您展示如何数据库
2) 通过页面隐藏模型重写Discuz.Web-install-index.aspx页面
这是我一年前写的一个用C#模拟以POST方式提交表单的代码,现在记录在下面,以免忘记咯。那时候刚学C#~忽忽。。很生疏。。代码看上去也很幼稚 臃肿不堪 #region 内容添加函数(Contentinsert) public string Contentinsert(string bookID, string bookTitle, string bookContent,string taskUrl,string Ztagend) { string uriS
asp.net ajax 充分利用客户端 JavaScript、DHTML 和 XMLHttpRequest 对象。其目的是帮助开发人员创建更具交互性的支持 AJAX 的 Web 应用程序 ASP.NET 页面的服务器端:ASP.NET 临时文件的存储以及动态生成的用于为页面响应提供服务的类的源代码。此外,还将构建一个可以与任何 ASP.NET 2.0 或 ASP.NET AJAX(原代号为“Atlas”)应用程序一同使用的资源管理器工具,以查看和调试您的页面执行的实际代码. http://msdn.mic
使用了 UpdatePanel 控件的方案是 ASP.NET AJAX 扩展中的重要方案。我们收到了许多关于此控件、UpdateProgress 控件以及二者功能的客户反馈。我们已经通过大量更改改善了部分页面呈现,并支持构建与 UpdatePanel 控件兼容的控件。我们还针对异步回发生命周期实现了丰富的事件模型,使您能够自定义客户端的更新处理。
回发或回调参数无效。在配置中使用 <pages enableEventValidation=”true”/> 或在页面中使用 <%@ Page EnableEventValidation=”true” %> 启用了事件验证
GridView控件是Asp.net 1.1版本流行控件DataGrid的继承者,功能比DataGrid增强不少,但是也有很大的不同啊。将最近使用这个控件的经验同各位同学分享如下: 1\掩藏字段的处理:DataGrid可以将字段直接设置为Visible=false,可以通过Cell[x].Text取到值。 GridView这个功能失效了,可以使用运行时来设定该列为掩藏。处理RowDataBound事件。 protected void GridView1_RowDataBound(object s
Controller:控制器 通过Model 读取处理数据,通过View 将结果返回。
1. Start 在这个阶段,页面属性,比如Request, Response, IsPostBack和UICulture 被创建。最为一个开发人员,大部分时候在这个阶段你不需要做任何事。如果你需要调用或者重写(override)这一阶段的行为,可以使用PreInit方法创建或者重新创建动态控件,设置master page或者theme或者读取和设置profile property的值。要注意的一点是,如果是回传(postback)的页面请求,所有控件的值还没有从view state里还原,如果你在这个阶段设置一个控件的值,这个值有可能在下面的阶段被重写并覆盖 2. Initialize 这个阶段对于开发人员是很重要。在这个阶段,theme被应用,所有的控件都被设置了唯一的ID。开发人员在这个阶段可以调用Init, InitComplete和PreLoad 方法。微软关于这些方法使用的建议如下: Init – 这个事件发生在所有控件被初始化并且皮肤设置也被应用后。使用这个事件来读取控件的初始化值。 InitComplete – 这个事件被Page对象触发,使用这个事件处理那些要求所有初始化工作都完成后才能做的事情。 PreLoad - 如果在页面或者控件进入Load事件前你有什么要处理的,使用这个事件。Page在触发这个事件后,Page就会为自己和所有的控件加载view state并且处理所有Request中的postback数据。 3. Load 这个阶段可能是开发者使用得最多的一个阶段。在这个阶段,所有的控件被viewstate中信息填充并被加载,OnLoad事件被触发。在这个阶段你可以为页面上所有的服务端控件设置属性,得到query strings,建立数据库连接。 4. Validation 如果你的控件要求验证,验证会在这个阶段发生,这个时候你可以检查控件的IsValid属性。跟这个阶段关联的事件是Validate,它有一个可以接受验证字符串群的重载方法(overload method),这个重载方法执行特定控件群的验证。 5. Event Handling 所有服务器端控件的事件处理发生在这个阶段。也就是说Click, SelectedIndexChanged等等这些事件会应用到你的服务器端控件,如果是页面请求是回传(postback)的话,这些事件的处理函数就会被控件触发。这个阶段可以使用的事件如下: LoadComplete – 在这个阶段,页面上所有的控件加载完毕 PreRender – 这里有几个重点,第一:页面对象(page object)会调用每一个控件的EnsureChildControls函数,并最终调用自己的。其次:所有具有DataSourceID的数据绑定控件都会调用自己的DataBind函数。要注意的一点是,PreRender事件会发生在一个页面的每一个控件上。在这个事件的最后,页面和所有控件的 ViewState被存储。 SaveStateComplete – 到这里,ViewState已经存储完毕,如果你有什么操作不需要修改控件但需要修改ViewState的,可以放在SaveStateComplete里面。 6. Render 渲染(Render)实际上不是一个事件,页面对象调用每一个控件的Render方法从而按顺序的输出控件的HTML代码。编写用户自定义控件的开发者对这个阶段最感兴趣了,因为输出用户自定义HTML代码的标准做法就是重写Render方法。如果你的控件是从ASP.NET服务器端控件继承来的,你也许不需要重写Render方法,除非你想呈现一个与用户控件默认行为不同的行为。这些都超出这个文档要讨论的范围了,如果想了解更多,请参考 Microsoft's Developing Custom ASP.NET Server Controls. ( http://msdn2.microsoft./zt27com/en-us/librarytfhy.aspx) 7. Unload 最后这个事件首先是被各个控件逐一触发,最后被页面触发。在这个时刻,所有的控件已经被渲染为输出流(output stream)并且无法被修改。这个阶段中,任何试图对response stream的操作都会引发异常。这个事件主要用于做一些清理工作,比如关闭数据库连接和打开的文件或者登记事件记录等等其它任务。 页面周期中都有哪些方法 下面列出ASP.NET页面生命周期中所有的方法,这些方法都可以被重写(override),要注意的是这些方法有的会递归调用,有个会被页面中的内容重复调用,这个列表是按照页面加载时最通用的顺序排列的。 Construct ProcessRequest FrameworkInitialize InitializeCulture If
下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
需求:从上面的截图中,可以看到这是两个<asp:DropDownList>控件实现的界面,现在的需求是这样的,实现当选择第一个下拉控件并选择了相应的数据后,那么此时在第二个<asp:DropDownList>中进行绑定他的子类在此显示,从而实现页面两级菜单实现数据统一绑定。
ViewState的通用解释就是:是 ASP.NET 页中的存储库,可以存储必须在回发过程中保留的值。页框架使用视图状态在各个回发之间保存控件设置。在各个回发之间保存值,而不将这些值存储在会话状态或用户配置文件中,将信息存储在视图状态中,这样在下次将该页发送到服务器时,代码便可以在页加载事件过程中访问这些信息。
在ASP.NET 2.0中,加入了许多新的功能和控件,相比asp.net 1.0/1.1,在各方面都有了很大的提高。其中,在数据控件方面,增加了不少控件,其中的Gridview控件功能十分强大。在本文中,将探讨Gridview控件中的一些功能特性和用法,如果各位读者对Gridview控件不大了解,可以通过《 使用ASP.NET 2.0中的Gridview控件》一文,来对Gridview控件有个初步的认识。
局部更新是ajax技术的最基本,也是最重要的用法,今天大概把asp.net ajax中的局部更新控件 updatepanel的用法记录下,大家可以共同探讨
Asp.net UpdatePanel 允许用户构建一个丰富的,以客户端为中心的应用程序,引用UpdatePanel控件,能够实现页面的部分刷新,一个包含scriptManage和 UpdatePanel控件的页面自动具有页面部分刷新的功能,不需要写任何的客户端JavaScript代码。一个web页面只能包含一个 ScriptManage控件,但可以包含一个或多个UpdatePanel控件。
ScriptManager和UpdatePanel控件联合使用可以实现页面局部异步刷新的效果。UpdatePanel用来设置页面中局部异步刷新的区域,它必须依赖于ScriptManager,因为ScriptManager控件提供了客户端脚本生成与管理UpdatePanel的功能。
由于GridView的分页功能实在是太弱了,所以需要使用强大的AspNetPager来作为分页控件。最简单的办法就是GridView控件下面接着放一个AspNetPager控件,但是这样好像就不能用GridView的分页功能了。在数据量不大的情况下,使用GridView的分页是十分方便有效的。另外还有一个问题就是分页控件在GridView生成的表格的下面,而没有像GridView自带分页那样包含到表格内部,这点也不是很爽。
在Asp.net 2.0中增加了一个新的数据绑定控件:GridView,其目的用来取代Asp.net1.x中的DataGrid控件,但有一点很不爽的是,如果把某列设置为visible=false,则不会进行数据绑定,也就是说无法直接从GridView中取到这个列内的文本。
学习ASP.NET也快三个月了,今天才对页面中几种不同元素区分开,惭愧! 1)HTML元素:跟普通的网页中的标签所定义的一样,没有服务器端的事件响应,能够直接在HTML代码中写客户端响应事件,如onclick="clientfun()"。 2)HTML服务器控件:在1)的基础上加了个runat="server",设计时写的HTML代码,在发送到客户端的网页中依然存在,因而可以在其中写客户端响应事件。但相对于1),它能够激发服务器端的事件serverclick。 3)web控件:形如<asp:butto
作者:Billy McCafferty 翻译:张善友 原文地址:http://www.codeproject.com/useritems/ModelViewPresenter.asp 这篇文章描述了ASP.NET 2.0使用Model-View-Presenter 模式实现业务逻辑与表现层的适当分离。 Download trivial example of MVP - 18 Kb Download simple Event-Handling MVP - 19 Kb Download sample M
本文转自:http://www.cnblogs.com/shangxia/articles/2281782.html
继上篇我们学习了RadWindow控件的用法之后,本篇我们将学习在项目中更加方便开发人员的常用控件RadAjax控件.
ScriptManager 控件管理用于 Microsoft ASP.NET AJAX 页面的客户端脚本。默认情况下,ScriptManager 控件将 Microsoft AJAX 库的脚本与页面注册到一起,这使脚本可以使用类型系统扩展并支持局部页面输出和 Web 服务调用。 在页面中,必须使用 ScriptManager 控件来使下列 Microsoft ASP.NET AJAX 的特性可用:
在录入界面中,用户往往需要按回车键时光标自动跳入下一个文本框,以方便录入操作。在C#中实现该功能有多种方法,以下是小编收集的不使用TAB键,而直接用回车键将光标转到下一个文本框的实现方法。
参考文章:http://blog.csdn.net/yicko/archive/2005/04/16/349740.aspx 1、加载的是普通的控件,不是用户控件。用户控件用Loadcontrol,而普通控件则是新建对象,再加入到Controls中 2、可以加到各级容器的Controls中 3、定位通过对style的修改来完成。可以参考手工添加的控件的style。 4、自动具备ViewState,但其加载时间是在page_load 和控件事件响应之间。所以,在Page_load事件中,不能获得动态控件的状态
这篇文章详细讲解了 ASP+ 验证控件的工作方式。如果要生成其中包含验证控件的复杂页面,或是要扩展验证框架,建议您阅读本文。如果要学习使用验证控件,或是要决定是否使用验证控件,请参见“ASP+ 中的用户输入验证(英文)”。
ASP.NET标准控件功能强大,虽然在编程方面方便点,后台代码可以任意访问到并操作,但CSS对母版内容页里的标准控件则很难。原因是经过编译之后的页面标准控件的ID都会变为母版页占位符和原ID的合成字符串,已经不是原来的ID值了,此时如果你的CSS是用ID来定位则失效(在没有母版页的普通aspx页面里标准空间的id值经过编译之后不会变化)。这就是为什么VS中查看到的代码和浏览器中看到的不一样的原因了。因此用CSS来定位最好是使用Class或者CssClass来做。
Page.ClientScript.RegisterStartupScript(Page.GetType(), “”, “<script>window.open(‘default2.aspx’)</script>”); 如果页面中使用了Ajax ,则上述代码即使执行也无效果。对这种情况我们通常采用: ScriptManager.RegisterStartupScript(this.Button1, this.GetType(), “alertScript”, “window.open(‘default2.aspx’);”, true); 其中第一个参数为要注册脚本的控件ID,试了一下,只要是本页面的就行。 第二个参数为注册脚本控件类型,是控件还是this的GetType()都可以,typeOf(string)也没问题. 第三个脚本函数的名字,随便起。 第四个是脚本内容。 第五个是标明是否再添加脚本标签,如果第四个参数里包含了<script></script>标签,此处则为false,否则为true。
大家好,又见面了,我是你们的朋友全栈君。DropDownList 控件用于创建下拉列表。DropDownList 控件中的每个可选项都是由 ListItem 元素定义的! 提示:该控件支持数据绑定! DropDownList 控件是一个下拉式的选单,功能和 RadioButtonList Web控件很类似,提供用户在一群选项中选择一个;不过RadioButtonList Web控件适合使用在较少量的选项群组项目,而DropDownList Web 控件则适合用来管理大量的选项群组项目。
领取专属 10元无门槛券
手把手带您无忧上云