Passe parâmetro para instância específica de Web Part com GetLimitedWebPartManager
-
09-12-2019 - |
Pergunta
Estou passando parâmetros para uma WebPart a partir de uma caixa de texto para ter uma melhor experiência de interface do usuário para uma WebPart personalizável que, neste caso, assume a forma de um feed do Twitter.
O problema que tenho é que no cenário em que um usuário tem mais de uma instância deste WebPart na página, o evento de clique que define o parâmetro não consegue dizer qual WebPart está fazendo a chamada.
Posso passar algum tipo de parâmetro de EventArgs para GetLimitedWebPartManager que identifique uma instância exclusiva da 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
{
}
}
}
}
Solução
Converter o controle para seu tipo e obter o ID do BindingContainer, que é o WebPart, permite corresponder esse parâmetro ao ID da Web Part que está sendo chamada.
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
{
}
}
}
}
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange