2016-11-03 2 views
0

Ich kontaktiere Sie, weil ich nicht weiß, wie man Daten von einem UserControl zu einem anderen sendet.ASP - Daten von UserControl zu einem anderen senden

Kontext:

Der erste Usercontrol, UrlControl (uc1) einen Text und ein Linkbutton, die dem Benutzer ermöglichen, eine URL zu einem Ereignis hinzufügen

Die anderen Usercontrol, TileColorControl (in meiner Datenbank.) (uc2) erlaubt dem Benutzer, einige Farben in seinem Event hinzuzufügen. Eine hinzugefügte Farbe kann an alle URLs oder an eine bestimmte URL angehängt werden. In diesem Steuerelement gibt es eine DropDownList, die die andere URL des Ereignisses enthält.

Was ich will ist: Wenn ich eine neue URL durch Klicken auf "Hinzufügen" (in uc1) erstellen, aktualisiert sich die DropDownList (in uc2) automatisch mit den aktualisierten Daten.

This is what I want to do

Vielen Dank im Voraus für Ihre Hilfe

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(); 
    } 

Antwort

0

Sie können diese beiden Steuerelemente auf der übergeordneten Ebene der Steuerungshierarchie verbinden, indem Sie Event Bubbling verwenden.

Ich nehme Ihre Kontrollen werden sowohl in einer anderen übergeordneten Steuerung oder Seite enthalten ist, wie folgt aus:

<control:UrlControl runat="server" id="uc1" /> 
<control:TileColorControl runat="server" id="uc2" /> 

Zuerst Sie ein Event in uc1 erklären haben - zum Beispiel "OnNewUrl":

public event EventHandler OnNewUrl; 

Dann binden Sie diese Veranstaltung zu Verfahren mit der gewünschten Funktionalität in "Master" Seite:

protected void Page_Load(object sender, EventArgs e) 
{ 
    uc1.OnNewUrl += RebindTileColorControl; 
} 

protected void RebindTileColorControl(object sender, EventArgs e) 
{ 
    // rebind uc2 here ... 
} 

Weitere Informationen über Event-Sprudeln Sie in MSDN here und here finden.

0

Mir scheint es, dass UrlControl sollte über die TileColorControl, die dort ist und sollte es sagen, zu aktualisieren.

hinzufügen eine öffentliche Variable/Eigenschaft mit dem Typ TileColorControl zum UrlControl Klasse

public TileColorControl AssociatedTileColor { get; set; } 

auf der übergeordneten Steuerung/Seite Sie den Verweis auf uc2 (die TileColorControl) zu uc1 der Variablen zuweisen/property

uc1.AssociatedTileColor = uc2; 

im UrlControl können Sie AssociatedTileColor verwenden, um die FillUrls Methode des uc1 zu nennen

if (uc1.AssociatedTileColor != null) 
{ 
    uc1.AssociatedTileColor.FillUrls(); 
} 
0

ich endlich gefunden, wie das zu tun:

TileColorControl: nichts Event.aspx (Seite, das Benutzersteuerelement enthält) zu verändern, ergänzen öffentliche Methode:

public void FillUrls() 
{ 
    TileColorControl.FillUrls(); 
} 

UrlControl: In Funktion hinzufügen oder aktualisieren Zeilen hinzufügen:

DMC.Event currentEvent = (DMC.Event)Page; 
currentEvent.FillUrls(); 

Es ist fertig, es aktualisiert meine DropDownList!

Verwandte Themen