asp.net – 在ASP中使用其他项目的用户控件
|
我正在尝试在其他项目中重用我的ASP用户控件,并遇到了问题.我已经在
http://weblogs.asp.net/scottgu/archive/2005/08/28/423888.aspx上阅读了ScottGu的帖子,并试图遵循他的模式,但运行时我的控件的子控件没有被初始化.
我的设置: >库项目(用于模型代码等),让我们称之为“ClassLibrary” 这背后的想法是Innermost包含功能,而Outer包含使Innermost -controls在特定框架中工作所需的任何特殊修改. ClassLibrary有这样的代码(这是我做的一个演示设置,以确保它是一个ASP问题,而不是我正在做的其他事情): using System;
namespace ClassLibrary {
public class LibraryClass {
public long getLong() {
return DateTime.Now.Ticks;
}
public string getString() {
return DateTime.Now.ToString();
}
}
}
Innermost引用库项目并且工作正常.这是此项目中UserControl的示例: <%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="WebUserControl1.ascx.cs"
Inherits="Innermost.UserControls.WebUserControl1" %>
<asp:Label ID="testLabel" runat="server"/>
代码隐藏: using System;
using System.Web.UI;
using ClassLibrary;
namespace Innermost.UserControls {
public partial class WebUserControl1 : UserControl {
protected void Page_Load(object sender,EventArgs e) {
LibraryClass c = new LibraryClass();
testLabel.Text = "Your number is " + c.getLong();
}
}
}
我在Innermost项目中有一个测试页面,它通过使用以下语法注册它们来使用Innermost项目的用户控件: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test1.aspx.cs"
Inherits="Innermost.Test1" %>
<%@ Register TagPrefix="inner" TagName="Control1"
Src="~/UserControls/WebUserControl1.ascx" %>
<%@ Register TagPrefix="inner" TagName="Control2"
Src="~/UserControls/WebUserControl2.ascx" %>
<!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>
Control 1:
<inner:Control1 ID="control1" runat="server" />
<br />
Control 2:
<inner:Control2 ID="control2" runat="server" />
</div>
</form>
</body>
</html>
外部项目引用Innermost和ClassLibrary;并包含UserControls,其中注册了Innermost控件: <%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="TopControl.ascx.cs" Inherits="Outer.Control.TopControl" %>
<%@ Register TagPrefix="inner" Assembly="Innermost"
Namespace="Innermost.UserControls" %>
<inner:WebUserControl1 ID="Control1" runat="server"/>
<inner:WebUserControl2 ID="Control2" runat="server"/>
使用简单的代码隐藏: namespace Outer.Control {
public partial class TopControl : UserControl {
public bool ShowType1 { get; set; }
protected void Page_Load(object sender,EventArgs e) {
Control1.Visible = ShowType1;
Control2.Visible = !ShowType1;
}
}
}
当我在Innermost项目中运行测试页面时,我没有错误,一切正常.当我运行Outer项目时,我得到NullReferenceExceptions告诉我尚未设置Innermost.UserControls.WebUserControlX的子控件. 堆栈跟踪: [NullReferenceException: Object reference not set to an instance of an object.] Innermost.UserControls.WebUserControl1.Page_Load(Object sender,EventArgs e) in c:TestASPInnermostInnermostUserControlsWebUserControl1.ascx.cs:9 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp,Object o,Object t,EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +99 System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Control.LoadRecursive() +141 System.Web.UI.Control.LoadRecursive() +141 System.Web.UI.Control.LoadRecursive() +141 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) +627 如果有人想仔细研究一下,我可以提供测试设置作为解决方案. 所以,最后,我的问题是:为什么控件的ChildControls没有按预期设置?即使我在外部控件的Init中运行CreateChildControls(),它们也没有被创建.我需要一些特殊的方法来编译Innermost项目以便在Outer项目中使用吗? 任何帮助将非常感激! 解决方法
我以前没有尝试过这个设置,但我可以猜测发生了什么. UserCotnrols旨在通过路径加载,而不是通过引用加载.您正尝试通过引用创建它们.请注意在内部项目中引用它们的方式与它与外部项目的不同之间的区别.我相信要使其工作,您需要参考.ascx文件的路径位置.
快速搜索显示如何在VS 2005中完成此操作,但在VS 2008中概念应该相同.您可以找到该信息here. 另一种选择是不使用设计图面,而是使用LoadControl方法加载控件,将路径传递给.ascx文件. 编辑 我希望这更清楚一些. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 无法获取MVC 4 FileExtensions属性来处理
- 初识ABP vNext(6):vue+ABP实现国际化
- 如何在ASP.NET中的GridView中定义CellPadding
- asp.net – 使用Web服务导致“无法处理没有有效操作参数的请
- asp.net-mvc – DateTime字段和Html.TextBoxFor()帮助器 如
- .net – App_LocalResources如何使用MVC?
- asp.net-mvc-3 – ASP.NET MVC3 – Html.TextBoxFor和autof
- ASP.NET知识点总结6
- asp.net – MVC 4可以在.net 3.5上运行吗?
- asp.net-mvc – Parallel Blob上传间歇性抛出404 Bad Reque
- asp.net-mvc – asp .net mvc授权
- asp.net-mvc-3 – “update-database”的实体框架
- asp.net – 你的aspx页面中的内联代码是一个好习
- asp.net – 无法为自定义MembershipProvider创建
- asp.net-mvc-3 – MVC 3 Razor EditorTemplate /
- asp.net – HttpMethod和HttpRequest的RequestTy
- asp.net-mvc-4 – 在一个StyleBundle中使用多个C
- asp.net-mvc – asp.net MVC:本地化
- asp.net – 指向同一页面的动作链接
- asp.net-mvc-4 – 自定义多态模型绑定程序不绑定
