ASP -将数据从UserControl发送到另一个
本文关键字:另一个 UserControl 数据 ASP | 更新日期: 2023-09-27 18:16:04
我正在联系你,因为我不知道如何将数据从UserControl发送到另一个。
背景:
第一个UserControl, UrlControl (uc1)有一个TextBox和一个LinkButton谁允许用户添加一个URL到一个事件(到我的数据库)
另一个UserControl, TileColorControl (uc2)允许用户在他的事件中添加一些颜色。添加的颜色可以附加到所有url或特定url。在这个控件中,有一个下拉列表,其中包含事件的不同url。
我想要的是:当我通过点击"添加"创建一个新的URL(在uc1中),下拉列表(在uc2中)自动刷新自己更新的数据。
这就是我想要做的
提前感谢您的帮助
UrlControl (uc1) code
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillUrls();
}
}
private void FillUrls()
{
RepeaterUrl.DataSource = UrlController.FindByEvent(EventId);
RepeaterUrl.DataBind();
}
protected void LinkButtonSaveNew_Click(object sender, EventArgs e)
{
string txtUrl = TextBoxNewUrl.Text;
if (UrlController.IsValidUrl(txtUrl))
{
DMCAccess.Event evt = EventController.FindByUrl(txtUrl);
if (evt != null)
{
btnMsgFailed.Visible = false;lbInfo.Visible = false;
showMsgAlreadyUsed(evt);
}
if (!UrlController.IsAlreadyExist(txtUrl))
{
Guid userGuid = PersonsController.GetPersonByUserGuid((Guid)Membership.GetUser().ProviderUserKey).Guid;
Url url = new Url
{
Guid = Guid.NewGuid(),
UrlLink = TextBoxNewUrl.Text,
IsDeleted = false,
EventGuid = EventId,
CreationByGuid = userGuid,
ModificationByGuid = userGuid,
CreationDate = DateTime.Now,
ModificationDate = DateTime.Now
};
UrlController.Create(url);
msgSuccess("http://" + url.UrlLink + " was created");
FillUrls();
}
}
else
{
HyperLinkViewEvent.Visible = false;
msgFailed("Please, enter a valid URL.");
}
}
TileColorControl (uc2) code
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
FillColors();
FillUrls();
}
}
protected void RepeaterColor_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DropDownList ddlUrls = (DropDownList)e.Item.FindControl("ddlUrls");
ddlUrls.DataSource = urls();
ddlUrls.DataTextField = "Value";
ddlUrls.DataValueField = "Key";
ddlUrls.DataBind();
ddlUrls.Items.Insert(0, new ListItem("Default", Guid.Empty.ToString()));
Guid? urlGuid = ((DMCAccess.TileColor)e.Item.DataItem).UrlGuid;
if (urlGuid.HasValue)
{
ddlUrls.SelectedIndex = ddlUrls.Items.IndexOf(ddlUrls.Items.FindByValue(urlGuid.Value.ToString()));
}
}
}
public void FillUrls()
{
DropDownListBoxUrl.DataSource = urls();
DropDownListBoxUrl.DataTextField = "Value";
DropDownListBoxUrl.DataValueField = "Key";
DropDownListBoxUrl.DataBind();
DropDownListBoxUrl.Items.Insert(0, new ListItem("Default", Guid.Empty.ToString()));
}
private Dictionary<Guid, string> urls()
{
Dictionary<Guid, string> dUrls = new Dictionary<Guid, string>();
foreach (Url u in UrlController.FindByEvent(EventId))
{
dUrls.Add(u.Guid, u.UrlLink);
}
return dUrls;
}
private void FillColors()
{
TextBoxNewIdColor.Text = TileColorController.MaxColorIdByEvent(EventId).ToString();
if (UrlController.FindByEvent(EventId).Count < 1)
{
upNoWebsite.Visible = true;
upColor.Visible = false;
}
RepeaterColor.DataSource = TileColorController.FindByEvent(EventId);
RepeaterColor.DataBind();
}
您可以使用Event冒泡在控件层次的父级连接这两个控件。
我想你的控件都包含在另一个父控件或页面中,像这样:
<control:UrlControl runat="server" id="uc1" />
<control:TileColorControl runat="server" id="uc2" />
首先你必须在uc1中声明一个Event。"OnNewUrl":
public event EventHandler OnNewUrl;
然后将此事件绑定到"master"页面中具有所需功能的方法:
protected void Page_Load(object sender, EventArgs e)
{
uc1.OnNewUrl += RebindTileColorControl;
}
protected void RebindTileColorControl(object sender, EventArgs e)
{
// rebind uc2 here ...
}
关于事件冒泡的更多信息你可以在MSDN中找到这里和这里
对我来说,似乎UrlControl应该知道那里的TileColorControl,应该告诉它更新。
为UrlControl类添加一个TileColorControl类型的公共变量/属性
public TileColorControl AssociatedTileColor { get; set; }
在父控件/页面上,将对uc2 (TileColorControl)的引用赋值给uc1的变量/属性
uc1.AssociatedTileColor = uc2;
在UrlControl中,你可以使用AssociatedTileColor来调用uc1的FillUrls方法
if (uc1.AssociatedTileColor != null)
{
uc1.AssociatedTileColor.FillUrls();
}
我终于知道怎么做了:
TileColorControl:没有改变事件。Aspx(包含用户控件的页面),添加公共方法:
public void FillUrls()
{
TileColorControl.FillUrls();
}
UrlControl: In function添加或更新添加行:
DMC.Event currentEvent = (DMC.Event)Page;
currentEvent.FillUrls();
它完成了,它更新我的下拉列表!