ASP.NET - 在 App_Code 类中实例化 Web 用户控件

5

文件:

网站\控件\map.ascx

网站\App_Code\map.cs

我想在map.cs中创建一个强类型的map.ascx实例。

通常,在aspx中,您需要添加一个<%Register...标签才能在代码后台实例化。在app_code类中是否可能实现这一点? 我正在使用.NET 3.5/Visual Studio 2008

谢谢!

2个回答

4
通常情况下,我会像这样做(假设您的类型为“Map”,并且您在.ascx文件中声明了适当的“Inherits”):
Map map = (Map)LoadControl("~/Controls/map.ascx");

1
这个不起作用。"Map"类型在App_Code中不可用。这与asp.net编译控件的方式有关。这就是我所说的需要在aspx中使用<%Register标记来获取类型的原因。 - Morgan T.
在这种情况下,我通常会将代码后台文件(例如Map.ascx.cs)移动到App_Code文件夹中。 - Ryan Duffield
ryan - 谢谢。虽然该网站无法编译,因为codebehind正在引用ascx代码中的控件。例如: icon.ImageUrl = imageUrl;错误:当前上下文中不存在“icon”名称。 - Morgan T.
你可以在类中创建一个受保护的成员变量:"protected Image icon",例如(其中“Image”是你的其他类型...)。 - Ryan Duffield
糟糕!如果我将CodeFile="~\App_Code\map.ascx.cs"放入代码中,它会出现编译错误:...在特殊目录“App_Code”中,不允许使用。 但是尝试使用部分类似乎也行不通。 - Morgan T.

1
在 Website\Controls 目录下是否有 map.ascx.cs 文件?如果有,请将其移动到 App_Code 目录下。请注意,您可能需要更新 .ascx 文件中的 CodeFile 属性为 ~\App_Code\map.ascx.cs。 或者,由于该控件是一个部分类,您可以在 ~\App_Code\map.cs 中创建代码。
public partial class controls_Map : UserControl
{
    protected void Page_Load( object sender, EventArgs e )
    {
         ...code here....
    }
}

从控件目录中的map.ascx.cs文件中删除所有方法。


同意。我忘了提到将.ascx.cs文件也移动到App_Code中。 - Ryan Duffield
1
关闭-我不得不将像page_load这样的方法移动到ascx文件中,但现在我在内联的方法/公共属性中访问Viewstate时遇到了问题:public Guid placeID { get { return (Guid)ViewState["placeID"]; } set { ViewState["placeID"] = value; } } Viewstate未被识别。 - Morgan T.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接