C# ASP.NET:向页添加控件时生成属性值
上下文:ASP.NET 3.5/C# 嗨 我创建了一个用户控件C# ASP.NET:向页添加控件时生成属性值,c#,asp.net,user-controls,controls,custom-controls,C#,Asp.net,User Controls,Controls,Custom Controls,上下文: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="myContr
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" />
步骤:
- 将此控件添加到web表单(aspx)
- 添加用户控件的HTML后,MyId的唯一值(对应于Guid.NewGuid())在设计时在ASPX HTML中设置为MyId属性值
- 添加了用户控件的HTML,但在设计时未在HTML中为MyId属性值设置MyId的唯一值
- 解决方法1:是否可以使用服务器控件来实现这一点?怎么做
- 解决方法2:是否可以使用UserControl设计模式任务来实现这一点
- 持久化属性值不是一个问题,因为它不会因控件的插入而改变,并且由ASP.NET通过aspx页面中的控件声明自动设置
- MyId属性不需要在运行时呈现
GRB 您在这里有几个问题,但首先我将回答您关于解决方法的问题
UniqueID
的属性,我不知道您是否试图重载它,但问题不清楚。第二个问题是,你的UniqueID基本上没有存储在任何地方。请尝试以下代码:
public Guid UniqueId {
get { return (Guid)ViewState["MyUserControlUniqueId"]; }
set { ViewState["MyUserControlUniqueId"] = value; }
}
这将在ViewState中存储GUID,以便您可以在回发时检索它
更新:根据您的评论,您需要覆盖/使用此方法向渲染内容添加属性
您在这里有几个问题,但首先我将回答您关于解决方法的问题
UniqueID
的属性,我不知道您是否试图重载它,但问题不清楚。第二个问题是,你的UniqueID基本上没有存储在任何地方。请尝试以下代码:
public Guid UniqueId {
get { return (Guid)ViewState["MyUserControlUniqueId"]; }
set { ViewState["MyUserControlUniqueId"] = value; }
}
这将在ViewState中存储GUID,以便您可以在回发时检索它
更新:根据您的评论,您需要覆盖/使用此方法向渲染内容添加属性
如果我正确理解了您的问题,您正在公开用户控件上名为MyId的属性。这允许您在放置该控件的任何位置设置属性 您还希望呈现的HTML也包含此属性和值 如果是这种情况,则属性MyId不会传递给HTML,这只是因为用户控件将MyId作为属性,它在设计器中可见 在用户控件中,您将定义呈现的标记。 例如,如果您有:
<asp:Panel runat="Server" Id="myControlDiv">Some other content</asp:Panel>
然后将以HTML格式获得输出,如下所示:
<div id="generatedID" MyID="443CBF34-F75F-11DD-BE2F-68C555D89123">Some other content</div>
其他一些内容
如果我正确理解了您的问题,您正在公开用户控件上名为MyId的属性。这允许您在放置该控件的任何位置设置属性
您还希望呈现的HTML也包含此属性和值
如果是这种情况,则属性MyId不会传递给HTML,这只是因为用户控件将MyId作为属性,它在设计器中可见
在用户控件中,您将定义呈现的标记。
例如,如果您有:
<asp:Panel runat="Server" Id="myControlDiv">Some other content</asp:Panel>
然后将以HTML格式获得输出,如下所示:
<div id="generatedID" MyID="443CBF34-F75F-11DD-BE2F-68C555D89123">Some other content</div>
其他一些内容
所以您只需要生成一个唯一的ID,并且只在设计时使用
为什么不重写Object.GetHasCode()
然后将其作为属性公开?那么您只需要生成一个唯一的ID,并且只在设计时使用 为什么不重写Object.GetHasCode()
然后将其作为属性公开?你好,尼克,我已经将原始属性重命名为UniqueId作为示例代码,我无意覆盖UniqueId。ViewState不是我的问题,目标是在生成的HTML中显示新的GUID。感谢更新,我还不够清楚。我的目标是在每次页面设计器将控件拖动到网页时,在ASPX设计时HTML中使用不同的GUID。该属性不需要添加到呈现的HTML中。嗨,Nick,我已经为示例代码将原始属性重命名为UniqueId,我无意覆盖UniqueId。ViewState不是我的问题,目标是在生成的HTML中显示新的GUID。感谢更新,我还不够清楚。我的目标是在每次页面设计器将控件拖动到网页时,在ASPX设计时HTML中使用不同的GUID。回复时不需要将该属性添加到呈现的HTML.tnx中。“您还希望呈现的HTML也包含此属性和值。”我可以理解为什么您现在会有这种印象,但这不是我的意图。对于HTML,我指的是aspx.tnx中的设计时HTML,供您回复。“您还希望呈现的HTML也包含此属性和值。”我可以理解为什么您现在会有这种印象,但这不是我的意图。我所说的HTML是指aspx中的设计时HTML。