我有一個自定義WebControl
類,表示由li
(列表項)元素包圍的HyperLink
。我希望能夠加載此控件並以編程方式將其添加到頁面中。使用LoadControl以編程方式加載WebControl(不是UserControl)
這裏是定製的Web控件(ListItemHyperLink.cs
):
public class ListItemHyperLink : HyperLink
{
public string ListItemCssClass { get; set; }
public override void RenderBeginTag(HtmlTextWriter writer)
{
if (!String.IsNullOrWhiteSpace(ListItemCssClass))
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, ListItemCssClass);
}
writer.RenderBeginTag("li");
base.RenderBeginTag(writer);
}
public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
writer.RenderEndTag();
}
}
這裏是我試圖將它添加到(Test.aspx
)的頁面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="Example.Test" %>
<!DOCTYPE html>
<html>
<head runat="server">
<title>My Page</title>
</head>
<body>
<form id="Form1" runat="server">
<ul runat="server" ID="UnorderedList">
</ul>
</form>
</body>
</html>
這裏是我試圖加載在頁面的代碼後面動態控制(Test.aspx.cs
):
public partial class Test : Page
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
var listItemHyperLink = (ListItemHyperLink) LoadControl("~/Controls/ListItemHyperLink.cs");
listItemHyperLink.Text = "Google";
listItemHyperLink.NavigateUrl = "http://google.com/";
listItemHyperLink.ListItemCssClass = "li-class";
listItemHyperLink.CssClass = "a-class";
UnorderedList.Controls.Add(listItemHyperLink);
}
}
當我嘗試,我得到以下異常:
無法轉換類型「System.Web.Compilation.BuildResultCompiledAssembly」的對象鍵入「System.Web.Util.IWebObjectFactory」。
這個例外是在我呼叫LoadControl()
的行上拋出的。
如何使用LoadControl()
(或其他方法)從代碼中使用此控件?
這似乎工作!我想我是過度思考的東西......我習慣於爲UserControl調用'LoadControl()',當它不適用於WebControls時,我感到沮喪。謝謝! –