设置用户控件的属性值 - C#

发布于 2024-12-31 23:12:10 字数 944 浏览 0 评论 0原文

我创建了 4 个用户控件,它们或多或少具有相同的属性。以下是用户控件源的示例:

<div>
    <asp:Label runat="server" ID="LabelPrompt"></asp:Label>
    <telerik:RadComboBox runat="server" ID="ComboBoxInput"></telerik:RadComboBox>
</div> 

当页面加载时,我需要更改 LabelPrompt 的值。这就是我正在做的事情:

                Control p = LoadControl("~/Parameters/TextBoxParameterUserControl.ascx");                    
                p.GetType().GetProperty("LabelPrompt").SetValue(p, "AAAA", null); 
                PanelParametersList.Controls.Add(p);

以前我尝试使用下面的代码来添加用户控件,但它不起作用。另一个线程建议我使用上面的代码,它有效(就将控件添加到视图而言)。

 PanelParametersList.Controls.Add(new TextBoxParameterUserControl());

不管怎样,编译器在下面一行抱怨:

p.GetType().GetProperty("LabelPrompt").SetValue(p, "AAAA", null); 

但这不起作用,它说“对象未设置为引用”......我做错了什么?

ps 我知道超级/子分类是可能的,但这不是我想要的!

I have created 4 user controls that more or less have the same properties. Here is an example of the source for the user control:

<div>
    <asp:Label runat="server" ID="LabelPrompt"></asp:Label>
    <telerik:RadComboBox runat="server" ID="ComboBoxInput"></telerik:RadComboBox>
</div> 

When the page loads I need to change the value of LabelPrompt. Here is what I am doing:

                Control p = LoadControl("~/Parameters/TextBoxParameterUserControl.ascx");                    
                p.GetType().GetProperty("LabelPrompt").SetValue(p, "AAAA", null); 
                PanelParametersList.Controls.Add(p);

Previously I tried to use the code below to add a user control but it didn't work. Another thread suggested I used the above code, which works (in terms of adding the control to the view).

 PanelParametersList.Controls.Add(new TextBoxParameterUserControl());

Anyway, the compiler complains at the following line:

p.GetType().GetProperty("LabelPrompt").SetValue(p, "AAAA", null); 

But this doesn;t work, it says 'Object not set to a reference'.....What am I doing wrong?

p.s. I am aware that super/sub classing is possible, but this is not what I am after!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

独闯女儿国 2025-01-07 23:12:10

您是否尝试过类似的操作(我希望您在运行时有意加载这些控件?):

TextBoxParameterUserControlic control = LoadControl("~/Parameters/TextBoxParameterUserControl.ascx") as TextBoxParameterUserControl;
if(control != null)
{
    control.LabelPrompt = "AAAA"; 
    PanelParametersList.Controls.Add(p);
}

当然,LabelPrompt 属性必须是public

Have you tries something like this (and I hope you are intentionally loading these controls at runtime?):

TextBoxParameterUserControlic control = LoadControl("~/Parameters/TextBoxParameterUserControl.ascx") as TextBoxParameterUserControl;
if(control != null)
{
    control.LabelPrompt = "AAAA"; 
    PanelParametersList.Controls.Add(p);
}

Of course the LabelPrompt property must be public.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文