首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一个页面上有多个usercontrol实例,但只引用了最后一个控件

一个页面上有多个usercontrol实例,但只引用了最后一个控件
EN

Stack Overflow用户
提问于 2011-06-01 11:56:13
回答 2查看 4.4K关注 0票数 0

我有一个允许用户上传文件并在GridView中显示它们的UserControl。在父页面上,我有一个jQuery选项卡控件,我在其中动态添加了我的UserControl的两个实例(在不同的选项卡上)。第二个实例运行得很好,所以我知道控件可以工作。然而,当我尝试使用第一个实例上传文件时,第二个实例被referenced...so所有属性值、控件名称等指向第二个实例的值。

这就是我在父页面代码隐藏中加载控件的方式:

代码语言:javascript
复制
protected void Page_Load(object sender, EventArgs e)
{
  MyControl ucAttachments1 = (MyControl) Page.LoadControl("~/controls/mycontrol.ascx");
  ucAttachments1.ID = "ucAttachments1";
  ucAttachments1.Directory = "/uploads/documents";
  ucAttachments1.DataChanged += new MyControl.DataChangedEventHandler(DoSomething);
  phAttachments1.Controls.Add(ucAttachments1);

  MyControl ucAttachments2 = (MyControl)Page.LoadControl("~/controls/mycontrol.ascx");
  ucAttachments2.ID = "ucAttachments2";
  ucAttachments2.Directory = "/uploads/drawings";
  ucAttachments2.DataChanged += new MyControl.DataChangedEventHandler(DoSomething);
  phAttachmetns2.Controls.Add(ucAttachments2);
}

在html中:

代码语言:javascript
复制
<div id="tabContainer">
    <div id="files">
        <asp:PlaceHolder id="phAttachments1" runat="server" />
    </div>
    <div id="drawings">
        <asp:PlaceHolder id="phAttachments2" runat="server" />
    </div>
</div>

用户控件代码的一个片段:

代码语言:javascript
复制
private string directory;

override protected void OnLoad(EventArgs e)
{
    PopulateAttachmentGridview();
}

protected btnUpload_Click(object sender, EventArgs e)
{
    UploadFile(directory);
}

public string Directory
{
    get { return directory; }
    set { directory = value; }
}

如何确保我的用户控件被正确引用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-01 12:40:11

检查呈现给客户端的实际html和javascript,以确保没有与控件相关的重复ID。

票数 1
EN

Stack Overflow用户

发布于 2011-06-01 13:15:35

我想这就是问题所在

代码语言:javascript
复制
MyControl ucAttachments1 = (MyControl) Page.LoadControl("~/controls/mycontrol.ascx");

MyControl ucAttachments2 = (MyControl)Page.LoadControl("~/controls/mycontrol.ascx");

您正在将控件的同一实例引用到两个不同的变量。所以现在你有了同一个实例的两个不同的引用,既然你最后设置了"ucAttachments2“的属性,那么发生的事情就是你的第二个控件属性被设置到了实例上。因此,每当您尝试访问该实例(通过使用"ucAttachments1“或"ucAttachments2”)时,您都会获得第二个控件的属性。

尝试执行以下操作:

代码语言:javascript
复制
MyControl ucAttachments1 = new MyControl();
ucAttachments1 = (MyControl) Page.LoadControl("~/controls/mycontrol.ascx");
 ucAttachments1.ID = "ucAttachments1";
  ucAttachments1.Directory = "/uploads/documents";
  ucAttachments1.DataChanged += new MyControl.DataChangedEventHandler(DoSomething);
  phAttachments1.Controls.Add(ucAttachments1);


MyControl ucAttachments2 = new MyControl();
ucAttachments2 = (MyControl) Page.LoadControl("~/controls/mycontrol.ascx");
ucAttachments2.ID = "ucAttachments2";
  ucAttachments2.Directory = "/uploads/drawings";
  ucAttachments2.DataChanged += new MyControl.DataChangedEventHandler(DoSomething);
  phAttachmetns2.Controls.Add(ucAttachments2);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6196096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档