Все, что связано с VSeWSS, просто закончится болью, поэтому метод 1 определенно отсутствует.Метод 2 также не идеален, так как настройка html-элементов в качестве элементов управления становится неуправляемой на уровне, превышающем то, что вы видите в этой демонстрации.Я использую довольно простой универсальный базовый класс, который принимает пользовательский элемент управления в качестве параметра типа и позволяет мне аккуратно отделить весь макет от инфраструктуры sharepoint.Если вы создаете страницы / веб-части программно, большая часть веб-части xml также оказывается необязательной.
public abstract class UserControlWebPart<T> : Microsoft.SharePoint.WebPartPages.WebPart where T:UserControl
{
protected UserControlWebPart()
{
this.ExportMode = WebPartExportMode.All;
}
protected virtual void TransferProperties(T ctrl)
{
var tc = typeof(T);
var tt = this.GetType();
foreach (var p in tt.GetProperties()) {
if (p.IsDefined(typeof(ControlPropertyAttribute), true)) {
foreach (var p2 in tc.GetProperties()) {
if (p2.Name == p.Name) {
p2.SetValue(ctrl, p.GetValue(this, null), null);
}
}
}
}
}
protected override void CreateChildControls()
{
string controlURL = ControlFolder+typeof(T).Name+".ascx";
var ctrl = Page.LoadControl(controlURL) as T;
TransferProperties(ctrl);
this.Controls.Add(ctrl);
}
protected virtual string ControlFolder
{
get {
return "~/_layouts/UserControlWebParts/";
}
}
}