【发布时间】:2013-07-25 21:54:40
【问题描述】:
我有一个自定义的 WebControl 类,它代表一个被 li(列表项)元素包围的 HyperLink。我希望能够加载此控件并以编程方式将其添加到页面中。
这是自定义 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()(或其他方法)从代码中使用此控件?
【问题讨论】:
标签: c# asp.net dynamic webforms custom-controls