【发布时间】:2011-08-19 15:49:17
【问题描述】:
这个问题是我之前发布的两个问题的延续:
1) How to get variables from .ascx in another .ascx?
2) C# asp.net textbox.text not setting?
我的第三个问题是,当我创建一个会话并通过从 ParentControl 到 ChildControl 解析信息,然后尝试将不同的信息解析到 ChildControl 的不同实例时,它会将值从第二个子控件复制到第一个子控件.
更新:显示我错过的 .ascx 页面可能是相关的。
父控件.ascx
<asp:PlaceHolder runat="server" id="ShowHideControls" Visible="false">
<asp:PlaceHolder runat="server" id="instanceOne" Visible="false">
<uc1:ChildControl ID="controlOne" runat="server" />
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" id="instanceTwo" Visible="false">
<uc1:ChildControl ID="controlTwo" runat="server" />
</asp:PlaceHolder>
</asp:PlaceHolder>
ParentControl.ascx.cs
public void CreateSessionsAddressString(User user)
{
if (user == user)
Session["user"] = user;
}
instanceOne ChildControl.ascx.cs
public void SetUserDetails()
{
User user = Session["user"] as User;
string fullAddress = User.fullAddress;
}
现在,如果我有同一个用户控件的第二个实例,则重复使用以下代码。
instanceTwo ChildControl.ascx
public void SetUserDetails()
{
User user = Session["user"] as User;
string fullAddress = user.fullAddress;
}
在 instanceTwo 上,当调用 set 方法来更新信息时,instanceOne 似乎使用来自 instanceTwo 的数据填充自身。我怎样才能防止这种情况发生?
更新:添加了更多信息以帮助解决以下问题。
所以在我们的解决方案中,我们有一个拥有帐户的用户,每个帐户可以有一个额外的用户。我执行检查以查看 user1 和 user2 是否不为空。
如果 user1 为 true 而 user2 为 null,那么我没有问题。当 user1 & user2 为真时,我在获取信息时遇到问题,因为当我调用该方法来获取用户信息时,它似乎覆盖了用户控件中的 user1 信息。
我需要像一些用户建议的那样包装代码,这样它只会影响自身,而不影响同一页面上的其他控件。我今天将通过一些建议,并尝试尽快回到您的 cmets。
更新我提到了我之前提出的问题
1) How to get variables from .ascx in another .ascx?
我想星期五晚上不是我最好的时间,我基本上在子控件中创建了一个公共方法,在父控件中我可以为每个实例调用公共方法,这样我就可以输入:
instanceOne.MyMethod();
instanceTwo.MyMethod();
这似乎是一个很好的解决方法,并且可以帮助我避免使用会话。我将请求删除该问题,因为我的解决方案已经在之前的问题中。
【问题讨论】:
-
您能否解释一下“第二个实例强制自己更新 instanceOne 上的信息”的意思?
-
我更新了它,你能看到我在页面上有两个相同的控件,当一个调用自身内部的方法时,它会影响另一个控件,我该如何阻止它?抱歉,我的意思是当调用在第二个实例中更新详细信息的方法时,它会影响第一个实例。
-
在这两种情况下到底有哪些细节正在改变?您要更改实例的属性吗?
-
每个控件都有一个被更改的 textbox.text 和 label.text。
-
这很奇怪——你能把代码贴在你设置属性的地方吗,还有为什么你展示了上面的 SetUserDetails 方法的代码,它们有什么关系?
标签: c# .net asp.net user-controls