Не в меру моих знаний.
Я использовал решение, в котором я добавляю веб-части программно через WebPartManager, а затем для настройки свойств этой веб-части использую отражение.
Пример добавления WP на страницу:
public static void AddWebPart<T>(string webPartZone, SPFile page)
{
Type wpType = typeof(T);
AspNet.WebPart webPart =
(AspNet.WebPart)wpType.GetConstructor(new Type[0]).Invoke(new object[0]);
try
{
page.CheckOut();
SPLimitedWebPartManager wpManager =
page.GetLimitedWebPartManager(AspNet.PersonalizationScope.Shared);
wpManager.AddWebPart(webPart, "WP Zone Name", 0);
page.CheckIn("Added web part", SPCheckinType.MajorCheckIn);
и вот как установить свойства для веб-частей:
public static void SetWebPartProperties<T>(Dictionary<string, string> properties,
SPFile page)
{
Type wpType = typeof(T);
SPLimitedWebPartManager wpManager =
page.GetLimitedWebPartManager(AspNet.PersonalizationScope.Shared);
foreach (AspNet.WebPart wp in wpManager.WebParts)
{
if (wp.GetType() == wpType)
{
foreach (KeyValuePair<string, string> kvp in properties)
{
System.Reflection.PropertyInfo pi = wpType.GetProperty(kvp.Key);
if (pi.PropertyType == typeof(int))
pi.SetValue(wp, int.Parse(kvp.Value, CultureInfo.InvariantCulture), null);
else if (pi.PropertyType == typeof(bool))
pi.SetValue(wp, bool.Parse(kvp.Value), null);
pi.SetValue(wp, kvp.Value, null);
}
wpManager.SaveChanges(wp);
}
}
page.CheckIn("Changed properties of webpart", SPCheckinType.MajorCheckIn);
}