就是将ascx的CS文件封装到一个DLL里面,避免每次加功能都要重新编译一次。
请大虾们帮帮忙啊。
请大虾们帮帮忙啊。
解决方案 »
- 在后台管理中怎么使用session
- 急急 ASP.NET连10G ORA-01008: 并非所有变量都已关联
- gridview的rowediting问题
- 如何统计客户端的分辨率。?
- 关于运行asp.net运行环境出现了问题,救命啊~~~
- 急救:在IIS中使用system.drawing.bitmap的问题
- 自己写了连接数据库的类,觉得像垃圾,大家能给个标准的吗
- =从aspx页面传值到asp,怎么得到它??
- 页面计时器控制
- web form我如何实现‘选择dropdownlist的其他值之后,如何把值保存倒对应那个datagrid的数据源的datatable中去呢????
- 为什么.net环境中获取百度等搜索引擎的关键字是乱码,而在EditPlus不会
- server.transfer方式传值,可是被指向的页加载的时候需要转化https,传值失败怎么解决
我建了一个类库,把CS文件放在类库里面
GuestView.DataSource = dbam.ExecuteTable();
这句直接报错,说找不到里面的控件。
页面是这样的。<%@ 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”
错了。不要删除这些文件,也不需要建立新的cs文件。正确的做法:建立一个ASP.Net Web应用程序类型的项目,然后添加用户控件,不要删除自动生成的cs文件,在这些cs文件里面写你的逻辑代码。然后编译成dll,接着按照之前说的方法添加引用,添加到工具箱,然后使用。
不是ascx文件,你编译的是整个项目,所以是你的项目编译成了dll,可以在你项目在DEBUG或者RELEASE目录下面看到编译后的dll。
我建了一个asp.net web 应用程序 。。里面随便添加了一个自定义控件,然后把这个类库编译后,将DLL放到原来那个WEB的BIN下面。
---------------------------------------------------------------------------
VS的右侧的工具箱--》右键--》选择项--》然后选择浏览,选择你编译好的dll但是添加的手说没有放置在工具箱的组件~
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 中。
只有web site项目才有发布时就完整编译所有UI设计文件的本事,web application项目无法编译那些文件而是丢给运行时再临时编译。