プログラムプレースホルダ(asp.net)にユーザーコントロールをロード
-
27-09-2019 - |
質問
私が持っている私の.aspxのページでは、
<%@ 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>
<body>
<form id="form1" runat="server">
<div>
<asp:PlaceHolder ID="Modulecontainer" runat="server"></asp:PlaceHolder>
</div>
</form>
</body>
</html>
私のaspx.vbで私が持っています。
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
の結果が空のプレースホルダとエラーなしである。
おかげでどのような援助のためにたくさん。
P.S Fat_Tonyの答えの後、私はにコードを変更し、
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
しかし、まだ何もありません残念なことにます。
解決
むしろ、あなたのUserControl.ascxファイルで指定されたクラス名としてそれを宣言し、「コントロール」タイプとしてユーザーコントロールを宣言よります:
<%@ Control className="MyUserControl" %>
だから、.aspxのページでコードビハインドでます:
Dim objControl as ASP.MyUserControl = CType(LoadControl("~\Controls\MyUserControl.ascx"), ASP.MyUserControl)
MSDN の上で利用できる詳細情報ます。
EDIT:あなたのユーザーコントロールのコードビハインドファイルをチェックして、そこにある名前空間とクラス名をメモを取ります。私は私のユーザーコントロールを作成した場合は、自動的にアプリケーションの名前空間としてだけでなく、フォルダ名が含まれて名前空間に追加されました。
次に、あなたの.aspx.vbで、あなたの.ascx.vbファイルから "Namespace.ClassName" と "ASP.ContentModule" を交換してください。また、あなたはまだあなたのプレースホルダのAddメソッドを呼び出していることを確認します。
私の例のC#でなく、あなたが必要な場合、私はVBで我慢することができます。私のアプリケーションは、便利な「テスター」に選ばれました。
ASCXコードビハインドます:
namespace Tester.modules
{
public partial class content : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
ASPXコードビハインドます:
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);
}
}
}
他のヒント
私は、あまりにもよくVBを知っていませんが、ユーザーコントロールだけでなく、コントロールする制御を宣言する必要はありませんか?例えば変更してみてください。
Dim loadmodule As Control
から
Dim loadmodule As UserControl
所属していません StackOverflow