上下文:ASP.NET 3.5 / C#
您好,
我创建了一个用户控件
public partial class MyControl : UserControl
{
// EDIT: example first used "UniqueId" as property name, which was wrong.
public Guid MyId { get; set; }
// ...
}
和此示例用法
<uc1:MyControl
ID="myControl"
MyId="443CBF34-F75F-11DD-BE2F-68C555D89123"
runat="server" />
步骤:
预期结果:
实际结果:
如果无法做到这一点:
澄清:
Gr B!
答案 0 :(得分:1)
答案 1 :(得分:0)
这里有几个问题,但首先我会回答你关于解决方法的问题。
这里有两个问题。已经存在一个名为UniqueID
的属性我不知道你是否试图超载,但问题不明确。第二个问题是您的UniqueID基本上没有存储在任何地方。请尝试以下代码:
public Guid UniqueId {
get { return (Guid)ViewState["MyUserControlUniqueId"]; }
set { ViewState["MyUserControlUniqueId"] = value; }
}
这将把GUID存储在ViewState中,以便您可以在回发时检索它。
更新:根据您的评论,您需要覆盖/使用此方法向呈现的内容添加属性。
答案 2 :(得分:0)
如果我正确理解您的问题,您将在您的用户控件上公开名为MyId的属性。这允许您在放置该控件的任何位置设置属性。
您还想要的是,呈现的HTML也包含此属性和值。
如果是这种情况,MyId属性不会传递给HTML,这只是因为用户控件将MyId作为属性,它在设计器中可见。
在您的用户控件中,您将定义要呈现的标记。 例如,如果你有:
<asp:Panel runat="Server" Id="myControlDiv">Some other content</asp:Panel>
然后你可以在你的控件预渲染事件(或你选择的任何地方)放置
myControlDiv.Attributes.Add("MyId", SomeGuid.ToString())
然后将在HTML中输出
<div id="generatedID" MyID="443CBF34-F75F-11DD-BE2F-68C555D89123">Some other content</div>
答案 3 :(得分:0)
所以你只想要一个你只在设计时使用的唯一ID吗?
为什么不覆盖Object.GetHasCode();
然后将其作为财产曝光?