web.config
===========================
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="TemplateControlSamples"/>
</assemblies>
</compilation>
</system.web>
</configuration>c1.aspx
==============================
<%@ Page Language="C#" Debug="true" %>
<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
<script runat=server language=c#>
void Page_Load() {
DataBind();
}
</script><html> <body> <form method="POST" runat="server"> Non Templated version: <TemplateControlSamples:Template1 Message="Hello World!" runat=server/> <hr> Templated version: <TemplateControlSamples:Template1 Message="Hello World!" runat=server> <MessageTemplate> <b><i><u>
<%# Container.Message %>
</u></i></b> </MessageTemplate> </TemplateControlSamples:Template1> </form> </body></html>c1.asp.cs
================================
using System;
using System.Data;
using System.Web.Services;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Text;namespace TemplateControlSamples { public class TemplateItem : Control, INamingContainer {
private String _message = null; public TemplateItem(String message) {
_message = message;
} public String Message { get {
return _message;
}
set {
_message = value;
}
}
} [
ParseChildren(true)
]
public class Template1 : Control, INamingContainer { private ITemplate _messageTemplate = null;
private String _message = null; public String Message { get {
return _message;
}
set {
_message = value;
}
} [
PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(typeof(TemplateItem))
]
public ITemplate MessageTemplate {
get {
return _messageTemplate;
}
set {
_messageTemplate = value;
}
} public override void DataBind() {
EnsureChildControls();
base.DataBind();
}
protected override void CreateChildControls() {
if (MessageTemplate != null) {
Controls.Clear();
TemplateItem i = new TemplateItem(this.Message);
MessageTemplate.InstantiateIn(i);
Controls.Add(i);
}
else {
this.Controls.Add(new LiteralControl(this.Message));
}
}
}
}我把文件c1.asp.cs编译放到bin文件夹里,运行c1.aspx时,但提示以下错误.
分析器错误信息: 找不到文件或程序集名称“TemplateControlSamples.TemplateItem”,或找不到它的一个依赖项。源错误:
行 3: <compilation>
行 4: <assemblies>
行 5: <add assembly="TemplateControlSamples.TemplateItem"/>
行 6: </assemblies>
行 7: </compilation>
源文件: D:\ASP.NET\demo\wc\web.config 行: 5 还有就是这个
<assemblies>
<add assembly="TemplateControlSamples"/>
</assemblies>
是怎样用的.
不是直接用<%@ Import Namespace="HelloWorld" %>调用bin里面的dll就可以的吗?
===========================
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="TemplateControlSamples"/>
</assemblies>
</compilation>
</system.web>
</configuration>c1.aspx
==============================
<%@ Page Language="C#" Debug="true" %>
<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
<script runat=server language=c#>
void Page_Load() {
DataBind();
}
</script><html> <body> <form method="POST" runat="server"> Non Templated version: <TemplateControlSamples:Template1 Message="Hello World!" runat=server/> <hr> Templated version: <TemplateControlSamples:Template1 Message="Hello World!" runat=server> <MessageTemplate> <b><i><u>
<%# Container.Message %>
</u></i></b> </MessageTemplate> </TemplateControlSamples:Template1> </form> </body></html>c1.asp.cs
================================
using System;
using System.Data;
using System.Web.Services;
using System.Drawing;
using System.Web;
using System.Web.UI;
using System.Text;namespace TemplateControlSamples { public class TemplateItem : Control, INamingContainer {
private String _message = null; public TemplateItem(String message) {
_message = message;
} public String Message { get {
return _message;
}
set {
_message = value;
}
}
} [
ParseChildren(true)
]
public class Template1 : Control, INamingContainer { private ITemplate _messageTemplate = null;
private String _message = null; public String Message { get {
return _message;
}
set {
_message = value;
}
} [
PersistenceMode(PersistenceMode.InnerProperty),
TemplateContainer(typeof(TemplateItem))
]
public ITemplate MessageTemplate {
get {
return _messageTemplate;
}
set {
_messageTemplate = value;
}
} public override void DataBind() {
EnsureChildControls();
base.DataBind();
}
protected override void CreateChildControls() {
if (MessageTemplate != null) {
Controls.Clear();
TemplateItem i = new TemplateItem(this.Message);
MessageTemplate.InstantiateIn(i);
Controls.Add(i);
}
else {
this.Controls.Add(new LiteralControl(this.Message));
}
}
}
}我把文件c1.asp.cs编译放到bin文件夹里,运行c1.aspx时,但提示以下错误.
分析器错误信息: 找不到文件或程序集名称“TemplateControlSamples.TemplateItem”,或找不到它的一个依赖项。源错误:
行 3: <compilation>
行 4: <assemblies>
行 5: <add assembly="TemplateControlSamples.TemplateItem"/>
行 6: </assemblies>
行 7: </compilation>
源文件: D:\ASP.NET\demo\wc\web.config 行: 5 还有就是这个
<assemblies>
<add assembly="TemplateControlSamples"/>
</assemblies>
是怎样用的.
不是直接用<%@ Import Namespace="HelloWorld" %>调用bin里面的dll就可以的吗?
<assemblies>
<add assembly="TemplateControlSamples"/>
</assemblies>
</compilation>
删除就可以了使用 服务器控件,只需要在头部 注册
<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>在aspx文件里写 <TemplateControlSamples:TemplateItem Message="Hello World!" runat=server>就可以了
行 1: <%@ Page Language="C#" Debug="true" %>
行 2: <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
行 3: <script runat=server language=c#>
行 4: void Page_Load() {
源文件: D:\ASP.NET\demo\wc\c1.aspx 行: 2
<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="c1.asp.dll" %>web.config改成
========================
<configuration>
<system.web>
</system.web>
</configuration>但还是出错:
分析器错误信息: 找不到文件或程序集名称“c1.asp.dll”,或找不到它的一个依赖项。源错误:
行 1: <%@ Page Language="C#" Debug="true" %>
行 2: <%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="c1.asp.dll" %>
行 3: <script runat=server language=c#>
行 4: void Page_Load() {
源文件: D:\ASP.NET\demo\wc\c1.aspx 行: 2
我想理清一点问题就是
第一:
你前面所说:使用 服务器控件,只需要在头部 注册
<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>
你所说的服务器控件应该改为用户自定义控件吧?还是我理解上有出入?
第二:
编译后的dll文件是否不能手工改名的,因为我之前编译成c1.asp.dll运行通过了,但这把文件名改成TemplateControlSamples.dll,而注册语句改成:<%@ Register TagPrefix="TemplateControlSamples" Namespace="TemplateControlSamples" Assembly="TemplateControlSamples" %>就出错了,说是:找到的名为“TemplateControlSamples”的程序集清单定义与程序集引用不匹配。是否文件在编译时就把文件名写入文件内,所以就不能手工直接修改了.
第三:
就是关于web.config中
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="DataObj"/>//这一块是怎样用的?是否要把所有bin中的类都写入,它直到什么作用?
</assemblies>
</compilation>
</system.web>
</configuration>