zoukankan      html  css  js  c++  java
  • 同一页面一个用户控件如何给另一个用户控件中的控件赋值

    "A用户控件有一个textbx
    B用户控件有若干Checkbox
    我要在B中选中若干 点击保存
    然后把checkbox的值赋给A中的Textbox"

     问题来自论坛。

     解决此问题,可以首先分析三者的职责,A用户控件,B用户控件以及B用户件的铵钮;如果更细一点来分析,A用户控件里的TextBox控件,此Textbox需要赋值,值从哪里来,它不用知道也无需知道。B用户控件里也有一个CheckBoxList控件,它只有数据,用户选择的值,将给谁,它也不知道,管不了。还有一个B用户控件的铵钮,铵钮将产生Click事件,它只管保存数据,把CheckBoxList选择的值,保存至TextBox。

    OK, 由于CheckBoxList和铵钮是同在一个用户控件内,它们之间的关系没有什么问题,可以直接访问。现在关键是怎样在B用户控件,访问到A用户控件的TextBox?

    可以这样想。由于A用户控件与B用户控件同拉放在aspx页面,这样它们就是在同一个容器中,可以直接访问。因此,可以创建一个接口,找到A用户控件的函数。

    IUserControlable
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    
    /// <summary>
    /// Summary description for IUserControlable
    /// </summary>
    namespace Insus.NET
    {
        public interface IUserControlable
        {
            UserControl uc();
        }
    }


    然后是.aspx.cs页实现刚才创建好的接口:

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;
    
    
    public partial class _Default : System.Web.UI.Page,IUserControlable
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           
        }
    
        public UserControl uc()
        {
            return this.UcA1;
        }
    }


    只要.aspx.cs实现了接口,那我们就可以把它.aspx.cs转为接口类型。

    View Code
     IUserControlable uca = (IUserControlable)this.Page;


    Ok,现在要考虑到的是TextBox,怎样给它赋值的问题。它只知道需要一个值,值从哪里来,它不管。因此,我们可以创建一个接口,接口有一个方法,这个方法带一个参数,这个参数就TextBox将得到的值。

    ISetValueable
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    /// <summary>
    /// Summary description for ISetValueable
    /// </summary>
    namespace Insus.NET
    {
        public interface ISetValueable
        {
            void SetValueForTextBoxControl(string value);
        }
    }


    由于TextBox控件在A用户控件内,因此A用户控件实现刚才创建的ISetValueable接口。

    View Code
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using Insus.NET;
    
    public partial class UcA : System.Web.UI.UserControl ,ISetValueable
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
    
        public void SetValueForTextBoxControl(string value)
        {
            this.TextBox1.Text = value;
        }
    }


    由于A用户控件实现了ISetValueable接口,因此也可以把A用户控件转为这个接口类型。

    View Code
    ISetValueable textbox = (ISetValueable)uca.uc();


    我们来看看动画演示:

    演示程序:

     http://download.cnblogs.com/insus/ASPDOTNET/uc_access_uc.rar

      

  • 相关阅读:
    selenium python 启动Chrome
    安装selenium python
    网络编程32
    动态生成验证码———MVC版
    C#之发送邮件【模板】+【封装】ZJ版
    【转】解读ASP.NET 5 & MVC6系列(1):ASP.NET 5简介
    Cache,MemCache,Application,Cookie等其它缓存汇总
    点击弹出li所在的序列号
    【转】js实现复制到剪贴板功能,兼容所有浏览器
    前端效果——持续更新。。。
  • 原文地址:https://www.cnblogs.com/insus/p/2943808.html
Copyright © 2011-2022 走看看