不知道如何在后面的代码中使用自定义控件

时间:2014-09-10 22:13:52

标签: c# asp.net

我用1个文本框进行了简单的控制。

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="sTextBox.ascx.cs" Inherits="TestingASPNET.Controls.sTextBox" className="sTextBox"%>
    <asp:Textbox runat="server" ID="tbNothing"/>
    <br />

我将此控件称为default.aspx中的引用。这是简单的代码。

   <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="TestingASPNET._default" %>
   <%@ Reference Control="~/Controls/sTextBox.ascx"%>

   <html xmlns="http://www.w3.org/1999/xhtml">
   <head runat="server">
   </head>
   <body>
     <form id="form1" runat="server">
     <div>
          <asp:PlaceHolder runat="server" id="PlaceHolder1" />
     </div>
     </form>
  </body>
  </html>

在default.aspx.cs我的代码中,我有。

   protected void Page_Load(object sender, EventArgs e)
    {
        PlaceHolder1.Controls.Add(LoadControl("~/Controls/sTextBox.ascx"));
        PlaceHolder1.Controls.Add(LoadControl("~/Controls/sTextBox.ascx"));
    }

这会将2个sTextBox添加到我的页面上。

我遇到的问题是如何像普通的textBox一样使用控件。例如。

   TextBox tb = new TextBox();
   tb.Text = "textbox";
   PlaceHolder1.Controls.Add(tb);

这会在页面上添加一个文本框,其中包含文本“textbox”。

有人可以给我一个完全正确的方法,但是使用控件sTextBox。

2 个答案:

答案 0 :(得分:0)

您可以通过向自定义控件添加属性来获取该行为。

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var ctrl = (sTextBox) Page.LoadControl("~/sTextBox.ascx");
        ctrl.Text = "something";
        placeHolder1.Controls.Add(ctrl);
    }
}

用户控制: -

public partial class sTextBox : System.Web.UI.UserControl
{
    public string Text { get; set; }
}

答案 1 :(得分:0)

我无法让你的代码发挥作用。

我要么

var ctrl = (ProjectName.Controls.sTextBox) Page.LoadControl("~/Controls/sTextBox.ascx");

或导入控件

 using ProjectName.Controls;

当我这样做时,它起作用了。

你的get set属性也不起作用,我不得不把它改成。

 public string Text { 
        get
        {
            return tbNothing.Text;
        }
        set
        {
            tbNothing.Text = value;
        }
    }

之后我又在控件总计2中添加了1个文本框。我将ID更改为tb1Text和tb2Text。然后,我必须为我的get set获得2个方法,这是

   public string tb1Text { 
        get
        {
            return tb1.Text;
        }
        set
        {
            tb1.Text = value;
        }
    }

    public string tb2Text
    {
        get
        {
            return tb2.Text;
        }
        set
        {
            tb2.Text = value;
        }
    }

在我的默认代码后面,我不得不使用

        sTextBox ctrl = (sTextBox)Page.LoadControl("~/Controls/sTextBox.ascx");
        ctrl.tb1Text = "something";
        ctrl.tb2Text = "something 2";
        PlaceHolder1.Controls.Add(ctrl);

这很有用,现在我知道如何在1个控件上使用2个文本框:)。希望它与我必须制作的其他控件相同:S