我需要一个可以在多个项目中重复使用的验证工具,因此我决定将其设为 Web 用户控件。以下是我设置它的步骤:
- 创建了一个新的 Web 项目并添加了我的 Web 用户控件。
- 在 IIS 中,我将项目启用为应用程序,并将这个新项目文件夹设置为将使用它的所有项目中的虚拟目录,并将每个虚拟目录启用为应用程序。
对于使用该控件的每个项目,我添加了对 dll 的引用,并将控件添加到该项目的
web.config
:<add tagPrefix="ut" src="~/UserControls/ValidateAcct.ascx" tagName="ValidateAcct" />
注意:
'UserControls'
是一个虚拟目录,实际上并不存在于每个宿主项目中。然后我将控件添加到主机页面:
<ut:ValidateAcct ID="valAcct" runat="server" />
在运行时,来自 Web 用户控件的内容正确显示在主机页面上,但从主机页面的代码隐藏中,我无法调用我为 Web 用户控件创建的任何方法。如果我完全从代码隐藏中实例化控件,则方法就在那里。我认为这是因为我仅使用 dll 工作,并且不涉及任何虚拟目录。
我遇到的另一个问题是事件。我在 Web 用户控件上创建了以下事件,我想在我的主机页面上处理它:
protected virtual void AccountValidated(object sender, EventArgs e) { }
再一次,从主机页面的代码隐藏中,我无法访问此事件。我想也许我可以在代码隐藏中实例化控件来访问事件,就像我对方法所做的那样,但即使这样也没有用。
这里的目标是我希望这个用户控件被一个网站中的多个项目使用,但只需要维护一份控件/代码的副本。这就是我选择虚拟目录路线的原因,但我觉得这是我所有问题的原因。任何人都可以提供任何帮助将不胜感激!