在一个页面上自定义控件,填充控件问题
本文关键字:自定义控件 填充 问题 控件 一个 | 更新日期: 2023-09-27 18:06:03
这个问题延续了我之前发布的两个问题:
1)如何从。ascx在另一个。ascx得到变量?
2) c# asp.net文本框。文本不设置?
我的第三个问题是,当我创建一个会话,并通过从ParentControl到ChildControl解析信息,然后尝试解析不同的信息到ChildControl的不同实例,它将值从第二个子控件复制到第一个子控件。
更新:显示。ascx页面,我错过了可能相关的
ParentControl.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为真,user2为空,那么我没有问题。当user1 &我在获取信息时遇到了一个问题,因为当我调用获取用户信息的方法时,它似乎覆盖了用户控件中的user1信息。
我需要像一些用户建议的那样包装代码,这样它只影响自己,而不影响同一页面上的其他控件。我今天会浏览一些建议,并尽量尽快回复你们的意见。
更新我引用了之前我问的一个问题
1)如何从。ascx在另一个。ascx得到变量?
我想周五晚上不是我最好的时候,我基本上在子控件中创建了一个公共方法,在父控件中我可以为每个实例调用公共方法所以我可以输入:
instanceOne.MyMethod();
instanceTwo.MyMethod();
这似乎是一个很好的工作,并帮助我避免使用会话是很好的。我要请求删除这个问题,因为我的解决方案已经在前面的问题中了。
我认为你遇到了这个问题,因为你正在从会话中拉动用户对象,而你正在创建的用户实例仍然指向存储在会话中的对象引用。
试试这样写:
string fullAddress = String.Copy(User.FullAddress);
你也可以这样做:
private string fullAddress;
public string FullAddress
{
get { return fullAddress; }
set { fullAddress = String.Copy(value); }
}
public void SetUserDetails()
{
User user = Session["user"] as User;
this.FullAddress = user.fullAddress;
this.FullAddress = "Hello world!";
}
在instanceTwo上,当调用set方法更新信息时,instanceOne似乎用来自instanceTwo的数据填充自己。
如果你的set操作更新了Session中的User
实例,那么在回发时,如果你的代码调用了 childControl.SetUserDetails()
,你会看到两个控件都更新了。尝试将对SetUserDetails()
的调用包装在if(!Page.IsPostBack)
块中,或者在Session中创建两个可以更新的独立实例。如果您只在初始加载页面时设置子控件上的值,那么您应该在回发时看到不同的值。
另外,请注意,我只是试图回答被问到的问题。这里可能有一个更好的设计,但我真的不明白你想要完成什么。