【问题标题】:Setting a textbox text in usercontrol from page从页面设置用户控件中的文本框文本
【发布时间】:2011-06-15 00:03:12
【问题描述】:

我有一个包含文本框的用户控件。我现在想向该用户控件添加变量,我们称之为文本,它将使用传入的值填充文本框。我认为这可以在用户控件后面代码中的变量“集合”中完成。

public string Text
{
    get {}
    set
    {
        txtBox.Text = value;
    }
}

txtBox 是用户控件中文本框的 ID。有谁知道如何做到这一点?

谢谢

编辑 我怀疑的问题是我在承载用户控件的页面的 Page_Load 中设置文本值。我应该在哪里设置这个值?

【问题讨论】:

  • 不,不是。不能为我的生活弄清楚为什么。事件将我的用户控件剥离为除了一个文本框之外什么都没有。
  • 这个属性的 getter 中到底有什么?它不是空白的,因为那不会编译。
  • 我创建了一个简单的用户控件,其文本框与您所说的相同,并已将您发布的相同代码(在 get 中返回文本框值)并在 page_load 中分配值,它工作正常。为什么不尝试使用简单的网络应用程序和带有文本框的简单用户控件?
  • 我希望为您的页面/控件启用视图状态
  • 请贴出页面代码(html)

标签: c# asp.net user-controls


【解决方案1】:

如果您的问题是 txtBox 为空,那么我可以建议您:

如果您要动态创建用户控件,请不要忘记在(隐式或显式)访问其子控件之前将其添加到页面的控件树中。否则所有这些子控件都将保持未初始化状态:

MyUserControl ctrl = (MyUserControl )Page.LoadControl("~/MyUserControl.ascx");
base.Controls.Add(ctrl);

ctrl.Text = "some value";

如果您的用户控件是在页面的标记中声明的,那么不要忘记使用 Register 指令进行注册,并将“Src”属性设置为您的用户控件的位置:

<%@ Register TagPrefix="controls" TagName="MyUserControl" 
    Src="~/MyUserControl.ascx" %>

<controls:MyUserControl id="ctrl1" Text="some value" runat="server" />

使用以下技术注册用户控件将不起作用(如果所有子控件都是动态创建的,则情况并非如此。但是您不需要用户控件 - 您只需要一个派生自 Control 类的类) :

<%-- Will not work for user controls --%>
<%@ Register Assembly="MyControlsAssembly.Shell" Namespace="MyControls" 
    TagPrefix="controls" %>

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多