Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET:向页添加控件时生成属性值_C#_Asp.net_User Controls_Controls_Custom Controls - Fatal编程技术网

C# ASP.NET:向页添加控件时生成属性值

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

上下文: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" />

步骤:

  • 将此控件添加到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。