In my .aspx page I have;
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" AspCompat="True" %>
<%@ Register src="Modules/Content.ascx" tagname="Content" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<bod开发者_如何学运维y>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="Modulecontainer" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
In my aspx.vb I have;
Try
Dim loadmodule As UserControl
loadmodule = Me.LoadControl("~/modules/content.ascx")
Modulecontainer.Controls.Add(loadmodule)
Catch ex As Exception
Response.Write(ex.ToString & "<br />")
End Try
The result is an empty placeholder and no errors.
Thanks a lot for any assistance
P.S after Fat_Tony's answer I changed the code to;
Try
Dim loadmodule As ASP.ContentModule
loadmodule = CType(LoadControl("~\Modules\Content.ascx"), ASP.ContentModule)
Modulecontainer.Controls.Add(loadmodule)
Catch ex As Exception
Response.Write(ex.ToString & "<br />")
End Try
But still no results unfortunately.
Rather than declaring your UserControl as type "Control", declare it as the Class Name you specified in your UserControl.ascx file:
<%@ Control className="MyUserControl" %>
So in your code-behind on the .aspx page:
Dim objControl as ASP.MyUserControl = CType(LoadControl("~\Controls\MyUserControl.ascx"), ASP.MyUserControl)
More info available on MSDN.
EDIT: Check the code-behind file for your user control and take note of the namespace and class name that are in there. When I created my user control, it was automatically added to a namespace which contained the folder name as well as the application namespace.
Then, in your .aspx.vb, replace "ASP.ContentModule" with "Namespace.ClassName" from your .ascx.vb file. Also, make sure you're still calling the Add method on your placeholder.
My example's in C# but I can put up in vb if you need. My application was conveniently named "Tester".
ASCX code-behind:
namespace Tester.modules
{
public partial class content : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
ASPX code-behind:
namespace Tester
{
public partial class _Default : System.Web.UI.Page
{
private Namespace.ClassName loadmodule;
protected void Page_Load(object sender, EventArgs e)
{
loadmodule = (Namespace.ClassName)LoadControl("~/modules/content.ascx");
Modulecontainer.Controls.Add(loadmodule);
}
}
}
I don't know VB too well, but don't you need to declare the control to be a UserControl and not just Control? e.g. Try changing
Dim loadmodule As Control
To
Dim loadmodule As UserControl
精彩评论