zoukankan      html  css  js  c++  java
  • 在用户控件 ASCX 创建用户控件 ASCX

    在用户控件 ASCX 创建用户控件 ASCX

    "我建了两个ascx,ascxA,ascxB
    ascxA中放了一个PlaceHold,
    ascxB中放了一个textBox
    ascxA在page_load中动态创建了5个ascxB但是页面上什么都没显示"


    这是来自论坛网友的问题,Insus.NET就以此问题做一个演示例子,方法与技巧分享给大家。

    在站点上创建一个用户控件ascx B, 拉一个TextBox在这个控件上。
    创建另一个用户控件ascx A 在这个用户控件上,拉一个Textbox 和一个按钮,是让用户在文本框输入数据,点一点铵钮,这样动态产生ascx B用户控件,呈现于ascx A用户控件的页面上。
    在站点上,创建一个aspx网页。把用户控件ascx 引用至aspx网页上。再在aspx网页上拉一个按钮。让用户点一点这个铵钮,去获取动态产生的文本框的值,并显示于aspx网页上。

    现在的问题,ascx A动态加载ascx B. 根据用户输入的数字来产生。
    怎样在aspx网页上,去获取那些动态产生文本框的值?

    好,带着疑问一步一步来完成它们。
    创建一个站点,Insus.NET使用的是.NET 4.0 和C#作为程序语言。
    创建一个AscxB.ascx用户控件:

          

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxB.ascx.cs" Inherits="AscxB" %><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

         View Code 

     
    AscxB.ascx.cs:

          

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class AscxB : System.Web.UI.UserControl{    protected void Page_Load(object sender, EventArgs e)    {    }       }
    

     在站点上创建用户控件AscxA.asx,在此控件上,拉一个文本框TextBox,一个铵钮Button和一个容器PlaceHolder。在铵钮添加onclick事件OnClick="ButtonGenerate_Click"

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxA.ascx.cs" Inherits="AscxA" %><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>&nbsp;&nbsp;<asp:Button ID="ButtonGenerate" runat="server" Text="Generate" OnClick="ButtonGenerate_Click" /><br /><br /><asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

         View Code 


    AscxA.ascx.cs:

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class AscxA : System.Web.UI.UserControl{      protected void Page_Load(object sender, EventArgs e)    {          }    protected void ButtonGenerate_Click(object sender, EventArgs e)    {           }   }

         View Code 

    下面是动态加载用户控件的方法,为了能让用户控件ascx a加载到ascx b。 Insus.NET在此,先创建接口(interface):

    接口写好,去ascx B实作这个接口:
    我们回到用户控件ascxA cs代码页,去写按钮Click的事件:
    上图中的29行代码,是判断文件框是否为空,是不是为数字。
    第35代码,是动态加载用户控件ascx B之后,并转为接口IUserControlable。然后加入PlaceHolder容器中去。

    现在,我们创建一个网页.aspx,在此网页中,我们引用用户控件ascxa,还在拉一个铵钮,和个Literal控件,铵钮与Literal最开始状态是隐藏的,主要是用来获取数据与显示数据。
    .aspx.cs代码:    

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;public partial class DynamicallyLoadUserControlDemo : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {            }    protected void ButtonGetValue_Click(object sender, EventArgs e)    {            }   }

         View Code 
    现在,我们做一些其它,即是说,在Ascx A用户控件,当有动态产生Ascx B控件之后,在网页的Button才会显示。如果没有产生过铵钮,网页Button就是隐藏起来。
    由于是否有控件产生是发生在ascx A用户控件,而隐藏的对象在网页上。这涉及到用户控件与网页之间的沟通与协调。
    为了减低程序的复杂度,Insus.NET得写一个接口,这个接口主体只有一个只写属性。
    接口写好了,我们在网页.aspx.cs实作这个接口。说明白一点,就是网页的铵钮只接受显示与隐藏,是谁来决定显示与隐藏,它管不了。
    具体是谁来控制显示与隐藏呢,刚才所说,是在用户控件ascx A的动态产生ascx B之后,这个网页的Button就显示。因此,我们去用户控件ascx a的产生控件代码中添加:

    有点疑问,怎样能把网页转为接口呢? 因为我们上面有把网页实作了IShowable这个接口。

    Ok, 我们回到网页cs,准备写铵钮click事件,来获取数据。不过获取数据起来,是有点困难,因为动态产生的控件,全是在用户控件ascx A中呈现,而且每呈现的文本框是来自ascx B。
    在网页中,怎样获取俄用户控件的ascx A的容器PlaceHolder呢? Insus.NET只会使用接口,因此还是写另外一个接口,是为了让网页.aspx.cs去读取用户控件的Ascx A的PlaceHolder。

    我们去用户控件ascx A实用这个接口:

    这样子,我们就可以在网页.aspx.cs的获取值的铵钮获取这个容器了。另外,由于容器根据用户的需求,也许不止单一次产生一个ascx B用户控件,也许会有好几个。我们怎样知道哪一个文本框TextBox是哪一个TextBox呢?
    还是写一个接口吧,
    接口写好,我们去ascx B用户控件来实作这个接口:
    到现在为止,我们完全可以去网页代码中,去写铵钮的Click获取值的事件了:
    上面代码中,#0是获取placeholder容器。
    #1是foreach容器中所有文本框。
    #2是显示文本框的值。
    到此为止,算是演示完成了。不过,我们还是来一个最终的效果演示吧:
    Demo source code:
    http://download.cnblogs.com/insus/ASPDOTNET/Ascx_load_ascx_page_getvalue.rar

  • 相关阅读:
    服务器设计之请求处理框架[转]
    为 Linux 应用程序编写 DLL[转]
    C语言编程技巧-signal(信号)[转]
    __thread关键字[转]
    iOS打电话、发短信、发邮件功能
    apple swift 初探
    cocos2d-x 3.x build 问题
    如何在WebApi中使用过滤器实现面向切面编程(AOP)
    Web API相对WCF优势,以及构建WebApi
    mvc中利用Attribute特性来进行进行简单的登陆验证
  • 原文地址:https://www.cnblogs.com/grj001/p/12223865.html
Copyright © 2011-2022 走看看