不同项目中的Web用户控制
我在一个单独的项目“WebControls”中放了一些自制的Web用户控件,现在想从其他项目中重用它们
我的控制包括:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="WebControls.TestControl" %>
<asp:Label ID="lblTest" runat="server" ></asp:Label>
<asp:TextBox ID="textBox" runat="server" Width="" />
<asp:HiddenField ID="hiddenFieldId" runat="server" />
与代码隐藏:
namespace WebControls
{
public partial class TestControl : System.Web.UI.UserControl
{
public Unit Width
{
get { return textBox.Width; }
set { textBox.Width = value; }
}
public string SelectedId
{
get { return hiddenFieldId.Value; }
set { hiddenFieldId.Value = value; }
}
public string SelectedText
{
get { return textBox.Text; }
set { textBox.Text = value;}
}
protected void Page_Init(object sender, EventArgs e)
{
}
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
我将它绑定到另一个项目中的网页中,如下所示:
<%@ Page Title="ToDo Serien" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="True" CodeBehind="RecurringToDos.aspx.cs" Inherits="TestAccess.RecurringToDos" %>
<%@ Register Assembly="WebControls" Namespace="WebControls" TagPrefix="aci" %>
<asp:Content runat="server" ID="FeaturedContent" ContentPlaceHolderID="FeaturedContent">
<section class="featured">
<div class="content-wrapper">
<hgroup class="title">
<h1><%: Title %>.</h1>
<h2>Serienelement</h2>
<aci:TestControl ID="aceRule" runat="server" Width="300" />
<asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" />
</hgroup>
</div>
....
当我现在启动页面时,它会在以下行中引发一个引用空异常:
set { textBox.Width = value; }
因为textBox = NULL
似乎我的控制没有正确启动。 我究竟做错了什么? 我该如何解决这个问题?
如果您想跨多个项目重用ascx
用户控件,则应将ascx
文件复制到使用者项目中,并按以下方式注册标签:
<%@ Register TagPrefix="uc" TagName="UserControl1" Src="~/UserControl1.ascx" %>
例如,您可以按照以下步骤操作:
为WebUserControls
创建一个新的Web项目名称
添加一个Web窗体用户控件并将其命名为UserControl1
<%@ Control Language="C#" AutoEventWireup="true"
CodeBehind="UserControl1.ascx.cs" Inherits="WebUserControls.UserControl1" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
并在后面的代码中添加:
public string Text
{
get { return TextBox1.Text; }
set { TextBox1.Text = value; }
}
在消费者项目中,添加对包含ascx
用户控件的项目的引用。
将控件的.ascx
文件复制到消费者项目中。
注意:您不需要将文件添加到项目中,但物理文件应该存在于您用作注册标记的Src
的路径中。
在您要使用该控件的页面中,添加以下内容:
<%@ Register TagPrefix="uc" TagName="UserControl1" Src="~/UserControl1.ascx" %>
这样使用控件:
<uc:UserControl1 runat="server" Text="UserControl1" />
注意
如果您不想复制ascx文件,则可以使用不依赖ascx
文件的Web Forms Server Control。 然后为了使用这些自定义控件,注册它们就足够了:
<%@ Register Assembly="WebUserControls" Namespace="WebUserControls" TagPrefix="uc" %>