就是将ascx的CS文件封装到一个DLL里面,避免每次加功能都要重新编译一次。
请大虾们帮帮忙啊。

解决方案 »

  1.   

    单独建立一个 类库类型的项目,在这个项目里面写自己的用户控件,然后编译成dll,其他项目添加引用即可。
      

  2.   

    不行啊。
    我建了一个类库,把CS文件放在类库里面
    GuestView.DataSource = dbam.ExecuteTable();
    这句直接报错,说找不到里面的控件。
      

  3.   

    你直接页面上有你自己定义的GuestView吗?没有当然不行了。你可以通过:VS的右侧的工具箱--》右键--》选择项--》然后项目,选择你编译好的dll,确定,这样就把你自己定义的控件添加到了工具箱上了,然后就可以直接拖这些控件到页面上了。
      

  4.   

    纠正:你可以通过:VS的右侧的工具箱--》右键--》选择项--》然后选择浏览,选择你编译好的dll,确定,这样就把你自己定义的控件添加到了工具箱上了,然后就可以直接拖这些控件到页面上了。
      

  5.   

    我首先建立了一个ASCX文件。
    页面是这样的。<%@ Control Language="C#" AutoEventWireup="true" Inherits="zw.admin.Control_Guest_Guest" %>
    <asp:GridView ID="GuestView" runat="server"></asp:GridView>
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />然后把他的CS文件删除了,在新建立的类库里面建立了一个CS文件。这是CS里面的代码: public void bind()
            {
                DBAM dbam = new DBAM();            dbam.BuildParameters("group_a", Request.QueryString, false);
                GuestView.DataSource = dbam.ExecuteTable();
                GuestView.AutoGenerateColumns = false;
                GuestView.DataBind();
            }现在是生成DLL的时候出错
    错误是:当前上下文中不存在名称“GuestView”
      

  6.   

    然后把他的CS文件删除了,在新建立的类库里面建立了一个CS文件-------------------
    错了。不要删除这些文件,也不需要建立新的cs文件。正确的做法:建立一个ASP.Net Web应用程序类型的项目,然后添加用户控件,不要删除自动生成的cs文件,在这些cs文件里面写你的逻辑代码。然后编译成dll,接着按照之前说的方法添加引用,添加到工具箱,然后使用。
      

  7.   

    ascx文件能编译成DLL么?----------------
    不是ascx文件,你编译的是整个项目,所以是你的项目编译成了dll,可以在你项目在DEBUG或者RELEASE目录下面看到编译后的dll。
      

  8.   

    不是ascx文件,你编译的是整个项目,所以是你的项目编译成了dll,可以在你项目在DEBUG或者RELEASE目录下面看到编译后的dll。---------------------------------------------------------------------------
    我建了一个asp.net web 应用程序 。。里面随便添加了一个自定义控件,然后把这个类库编译后,将DLL放到原来那个WEB的BIN下面。
    ---------------------------------------------------------------------------
    VS的右侧的工具箱--》右键--》选择项--》然后选择浏览,选择你编译好的dll但是添加的手说没有放置在工具箱的组件~
      

  9.   

    我的意思是能不能将自定义控件的WEB界面放在web 应用程序里面,,把CS文件放在其他类库里面,以后直接用这个DLL就是了。
      

  10.   

    刚才看了一篇文章
    1。新建web项目:Crystal将自动生成的页面改名为:default.aspx,除去后台代码default.aspx.cs。
    2。于解决方案内新建类库项目:Controls此类库将包含Login.cs,相当于以往的login.ascx.cs
    3.在类库项目Controls内添加基类SkinnedWebControl.cs 
    using System;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;namespace Controls
    {[ParseChildren(true)]
    public abstract class SkinnedWebControl:WebControl, INamingContainer
    {
    string skinFilename = null;public SkinnedWebControl()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }protected override void CreateChildControls() 
    {
    Control skin;// 装载用户控件文件
    skin = LoadSkin();// 初始化控件和对控件绑定
    InitializeSkin(skin);Controls.Add(skin);
    }protected Control LoadSkin() 
    {
    Control skin;// 用户控件文件默认放在Themes目录下
    string skinPath = "modules/" + SkinFilename;// 是否定义了用户控件文件?
    if (SkinFilename == null)
    throw new Exception("必须定义SkinFilename属性,指定用户控件文件路径");// 通过Page.LoadControl(defaultSkinPath)方法,从用户控件文件中获取 UserControl 对象
    try 
    {
    skin = Page.LoadControl(skinPath);
    }
    catch (FileNotFoundException) 
    {
    throw new Exception("用户控件文件未找到!");
    }return skin;
    }protected abstract void InitializeSkin(Control skin);/// <summary>
    /// 用户控件文件路径
    /// </summary>
    public string SkinFilename 
    {
    get { return skinFilename;}
    set { skinFilename = value; }
    }
    }
    }
    4。在web项目:Crystal中创建modules目录,添加用户控件文件Login.ascx,除去Login.ascx.cs包含如下组件 <P><asp:Label id="Label1" runat="server">姓名:</asp:Label>
    <asp:TextBox id="NameTBox" runat="server"></asp:TextBox></P>
    <P><asp:Label id="Label2" runat="server">密码:</asp:Label>
    <asp:TextBox id="PasswordTBox" runat="server"></asp:TextBox></P>
    <P><asp:Button id="SubmitBtn" runat="server" Text="确定"></asp:Button></P>
    <P><asp:Label id="ResultLabel" runat="server" ForeColor="Red"></asp:Label></P>5.在类库项目Controls中添加Login.csusing System;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace Controls
    {
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    public class Login:SkinnedWebControl
    {string skinFilename = "Login.ascx"; // 指定默认皮肤样式
    TextBox nameTBox; // 帐号输入框
    TextBox passwordTBox; // 密码输入框
    Button submitBtn; // 登陆按钮
    Label resultLabel; // 显示登陆结果public Login()
    {
    if (SkinFilename == null)
    SkinFilename = skinFilename;
    }/// <summary>
    /// 重写InitializeSkin,初始化控件和对控件进行绑定
    /// </summary>
    /// <param name="skin"></param>
    protected override void InitializeSkin(System.Web.UI.Control skin)
    {
    // 查找ascx页中ID是NameTBox的textbox控件
    nameTBox = (TextBox) skin.FindControl("NameTBox");
    // 绑定数据
    nameTBox.Text = "Crystal";// 查找ascx页中ID是password的textbox控件
    passwordTBox = (TextBox) skin.FindControl("PasswordTBox");
    // 绑定数据
    // 初始化Result控件
    resultLabel = (Label) skin.FindControl("ResultLabel");// 找到登陆按钮
    submitBtn = (Button) skin.FindControl("SubmitBtn");
    submitBtn.Click+=new EventHandler(submitBtn_Click);
    }/// <summary>
    /// 响应登陆按钮事件
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></paramprivate void submitBtn_Click(object sender, EventArgs e)
    {
    if (nameTBox.Text == "Crystal" && passwordTBox.Text == "123")
    resultLabel.Text = "<font color='blue'>登陆成功!";
    else
    resultLabel.Text = "<font color='red'>登陆失败,用户名密码不匹配!";
    }
    }
    }6.在default.aspx 的html源码顶部添加:<%@Register TagPrefix = "UC" Namespace="Controls" Assembly="Controls"%> 将组件引用来。
    添加:<UC:Login id="login1" runat="server"></UC:Login>于 窗体控件中。<%@Register TagPrefix = "UC" Namespace="Controls" Assembly="Controls"%>
    <html>
    <head>
    <title>WebForm1</title>
    </head>
    <body MS_POSITIONING="GridLayout">
    <form id="Form1" method="post" runat="server">
    <UC:Login id="login1" runat="server"></UC:Login>
    </form>
    </body>
    </html>我照着做了,但是报错说
    未处理的“System.StackOverflowException”类型的异常出现在 System.Web.dll 中。
      

  11.   

    SORRY!自己写的asp.net服务器控件可以添加到工具,用户控件不行。因为,你只能写成自定义asp.net服务器控件,那么这个就搞复杂了。要么就是用户控件就只能在你web或者网站项目里面了。
      

  12.   


    只有web site项目才有发布时就完整编译所有UI设计文件的本事,web application项目无法编译那些文件而是丢给运行时再临时编译。