Passez le paramètre à une instance spécifique de la partie Web avec GetLimitedwebPartManager
-
09-12-2019 - |
Question
Je passe des paramètres sur une webpart d'une zone de texte pour avoir une meilleure expérience d'interface utilisateur pour une webPart personnalisable qui, dans ce cas, elle prend la forme d'un flux Twitter.
Le problème que j'ai, est dans le scénario qu'un utilisateur possède plusieurs instance de ce WebPart sur la page, l'événement de clic qui définit le paramètre ne peut pas indiquer quelle webpart effectue l'appel.
Puis-je passer une sorte de paramètre de evenargs à getlimitedwebPartManager qui identifie une instance unique du WebPart?
protected void setTwitterName_Click(object sender, EventArgs e)
{
string Name = TwitterHandle.Text.Trim();
if (!String.IsNullOrEmpty(Name))
{
using (var webPartManager = SPContext.Current.Web.GetLimitedWebPartManager("default.aspx",PersonalizationScope.User))
{
try
{
foreach (var twitterWebPart in webPartManager.WebParts.Cast<WebPart>().Where(webPart => webPart.Title == "Twitter").Cast<Twitter>())
{
twitterWebPart.Name = Name;
webPartManager.SaveChanges(twitterWebPart);
PropertiesWebPart.Name = Name;
DisplayTweets();
}
}
catch
{
}
}
}
}
La solution
Casting the control to its type, and then getting the ID of the BindingContainer, which is the WebPart, allows me to match that parameter to the ID of the Web Part being called.
protected void setTwitterName_Click(object sender, EventArgs e)
{
string Name = TwitterHandle.Text.Trim();
var x = (Button)sender;
var WebPartID = x.BindingContainer.ID;
if (!String.IsNullOrEmpty(Name))
{
using (var webPartManager = SPContext.Current.Web.GetLimitedWebPartManager("default.aspx",PersonalizationScope.User))
{
try
{
foreach (var twitterWebPart in webPartManager.WebParts.Cast<WebPart>().Where(webPart => webPart.Title == "Twitter").Cast<Twitter>())
{
if(twitterWebPart.ID == WebPartID)
{
twitterWebPart.Name = Name;
webPartManager.SaveChanges(twitterWebPart);
PropertiesWebPart.Name = Name;
DisplayTweets();
}
}
}
catch
{
}
}
}
}
}