То, что я пытаюсь сделать, это генерировать Linkbuttons всякий раз, когда пользователь нажимает на статические LinkButtons, которые находятся внутри моего aspx, выглядит так:
Они выглядят так:
<asp:LinkButton ID="lnkSubWeb" runat="server" OnCommand="lbWeb_Click" />
Метод, который срабатывает, следующий:
/// <summary>
/// Handles the Click event of the lbWeb control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="CommandEventArgs"/> instance containing the event data.</param>
protected void lbWeb_Click(object sender, CommandEventArgs e)
{
var url = e.CommandArgument.ToString();
using (var site = new SPSite(url))
{
using (var selectedWeb = site.OpenWeb())
{
ViewState["RelativeUrl"] = selectedWeb.ServerRelativeUrl;
ViewState["WebUrl"] = selectedWeb.Url;
LoadWebItems(selectedWeb);
}
}
}
Насколько я знаю, цикл страницы работает следующим образом: Загрузка страницы -> Щелчок кнопки -> Предварительная визуализация страницы.
Итак, в основном, когда пользователь нажимает на эту кнопку ссылки, я хочу динамически генерировать 5 кнопок ссылок, а также добавлять и передавать им событие lbWeb_Click
, но оно не срабатывает. Ничего не происходит, когда я нажимаю на сгенерированные LinkButtons.
Поэтому, когда я сохранил данные во ViewState, я использую следующий метод для создания этих кнопок ссылок:
private void Page_PreRender(object sender, EventArgs e)
{
RelativeUrl = (string)ViewState["RelativeUrl"];
WebUrl = (string)ViewState["WebUrl"];
if (!string.IsNullOrEmpty(RelativeUrl))
{
LoadBreadCrumb(RelativeUrl, WebUrl);
}
}
Метод LoadBreadCrumb()
выглядит так:
private void LoadBreadCrumb(string relativeurl, string weburl)
{
var relativePath = relativeurl.Substring(1);
var urlList = weburl.ParseUrl();
var linkList = new List<string>(relativePath.Split('/'));
for (int i = 0; i < linkList.Count; i++)
{
var link = UppercaseFirst(linkList[i]);
var linkButton = new LinkButton
{
Text = link + " > ",
CssClass = "breadcrumb",
CommandArgument = urlList[i]
};
linkButton.Command += lbWeb_Click;
bcHolder.Controls.Add(linkButton);
}
}
Таким образом, в основном этот код генерирует кнопки ссылок именно так, как я хочу, но lbWeb_Click
не срабатывает на них.
С другой стороны, я пытался поместить этот код в Page_Load, и это не работает, всегда на один шаг позади. LinkButtons не отображаются после события щелчка, но он генерируется после Page_Load, а затем событие щелчка на них действительно работает.
Любая помощь приветствуется