
1打开VS2008-新建一个工程-选译ASP。NET服务器控件
2自动生成一个文件,打代码拷进去,调试好程序
3点击“生成菜单-生成XX”
4到 工程目录\bin\Debug 找到dll文件把它拷到一个固定目录里如:DotNet_DLL里
============附带一个我重写Repeater的代码===================
using System;
using SystemCollectionsGeneric;
using SystemComponentModel;
using SystemLinq;
using SystemText;
using SystemWeb;
using SystemWebUI;
using SystemWebUIWebControls;
using SystemData;
using SystemDataSqlClient;
using SystemDataOleDb;
namespace lwf_MVClwf_Controls
{
[DefaultProperty("pageIndex")]
[ToolboxData("<!--Repeater Begin --><:Repeater ID=\"Rep_list\" runat=\"server\" EnableViewState=\"false\" DisplayPageing=\"Always\"> <ItemTemplate> </ItemTemplate> </:Repeater><!--Repeater End -->")]
public class Repeater : SystemWebUIWebControlsRepeater
{
private int _recordcount = 0;
private int _pageSize = 0;
private int _pageIndex = 1;
private string _PID = "";
private string _CssClass = "CssPage"; //输出数据流时设一个样式给它样式名为CssPage
private object _DataSourceList;
private PagedDataSource _pds = new PagedDataSource();
//public bool _DisplayPageing;
public MyEnum _DisplayPageing;
private MyEnumLanguage _Language;
//构造函数
public Repeater()
{
}
#region ____________控件属性:RecordCount、pageSize、pageIndex、PID、CssClass、DataSource1____________
[Bindable(true)]
[Category("data")]
[DefaultValue("1")]
[Localizable(true)]
[Description("记录总数")]
public int RecordCount
{
get
{
return _recordcount;
}
set
{
_recordcount = value;
}
}
[Bindable(true)]
[Category("data")]
[DefaultValue("15")]
[Localizable(true)]
[Description("单页记录数")]
public int pageSize
{
get
{
return _pageSize;
}
set
{
_pageSize = value;
}
}
[Bindable(true)]
[Category("data")]
[DefaultValue("1")]
[Localizable(true)]
[Description("当前页码")]
public int pageIndex
{
get
{
return _pageIndex;
}
set
{
_pageIndex = value;
}
}
[Bindable(true)]
[Category("data")]
[DefaultValue("")]
[Localizable(true)]
[Description("其它参数传递")]
public string PID
{
get
{
return _PID;
}
set
{
_PID = value;
}
}
[Bindable(true)]
[Category("data")]
[DefaultValue("CssPage")]
[Localizable(true)]
[Description("连接样式")]
public string CssClass
{
get
{
return _CssClass;
}
set
{
_CssClass = value;
}
}
[Bindable(true)]
[Category("data")]
[DefaultValue("")]
[Localizable(true)]
[Description("数据源,DataTable")]
public object DataSource1
{
get
{
return _pds;
}
set
{
switch (valueGetType()ToString())
{
case "SystemDataDataTable":
_recordcount = ((DataTable)value)RowsCount;
_pdsDataSource = ((DataTable)value)DefaultView;
break;
case "SystemCollectionsGenericList`1[SystemObject]":
_recordcount = ((List<object>)value)Count;
_pdsDataSource = (List<object>)value;
break;
case "SystemDataSqlClientSqlDataReader":
DataTable i_dt = NormalConvertDataReaderToDataTable((SqlDataReader)value);
_recordcount = i_dtRowsCount;
_pdsDataSource = i_dtDefaultView;
break;
case "SystemDataSqlClientOleDbDataReader":
DataTable i_dtOle = NormalConvertDataReaderToDataTable((OleDbDataReader)value);
_recordcount = i_dtOleRowsCount;
_pdsDataSource = i_dtOleDefaultView;
break;
default:
_recordcount = ((DataTable)value)RowsCount;
_pdsDataSource = ((DataTable)value)DefaultView;
break;
}
_pdsAllowPaging = true;
_pdsPageSize = _pageSize;
_pdsCurrentPageIndex = this_pageIndex - 1;
baseDataSource = _pds;
}
}
public MyEnum DisplayPageing
{
get
set
}
public enum MyEnum
{
Always = 1,
Auto = 2,
Never = 3
}
public MyEnumLanguage Language
{
get
set
}
public enum MyEnumLanguage
{
Chinese = 1,
English = 2
}
#endregion
//外部使用
public string ThePage()
{
string retStr = "";
retStr = thisThePage(_recordcount, _pageSize, _pageIndex, _PID, _CssClass);
return retStr;
}
//分页函数,为输出显示流提供HTML代码
/// <summary>
/// 分页函数
/// </summary>
/// <param name="i_RecordCount">总记录数</param>
/// <param name="i_pageSize">每页记录数</param>
/// <param name="i_pageIndex">当前页数</param>
/// <param name="i_PID">其它参数</param>
/// <param name="i_CssClass">连接样式</param>
/// <returns>HTML代码</returns>
public string ThePage(int i_RecordCount, int i_pagesize, int i_pageIndex, string i_PID, string i_CssClass)
{
int i_Pcount = 0;
int i_StartPageNum;
int i_EndPageNum;
string i_pagerString = "";
string i_pagerString_ENG = "";
i_pagerString = i_pagerString + "<style type=\"text/css\">\nCssPage \naCssPage:hover\n</style>\n";
i_pagerString_ENG = i_pagerString_ENG + "<style type=\"text/css\">\nCssPage \naCssPage:hover\n</style>\n";
if (i_pagesize != 0)
{
i_Pcount = (i_RecordCount / i_pagesize);
i_Pcount = ((i_RecordCount % i_pagesize) != 0 i_Pcount + 1 : i_Pcount);
i_Pcount = (i_Pcount == 0 1 : i_Pcount);
}
if (i_pageIndex <= 0) i_pageIndex = 1;
if (i_pageIndex > i_Pcount) i_pageIndex = i_Pcount;
i_StartPageNum = 1;
while (i_StartPageNum + 10 <= i_pageIndex)
{
i_StartPageNum = i_StartPageNum + 10;
}
i_EndPageNum = i_StartPageNum + 9;
if (i_EndPageNum > i_Pcount) i_EndPageNum = i_Pcount;
i_pagerString = i_pagerString + "<div class='" + i_CssClass + "' style='padding-left:20px;padding-right:20px'>共<b>" + i_Pcount + "</b>页 共有<b>" + i_RecordCount + "</b>记录 第<b>" + i_pageIndex + "</b>页 跳到第 [ ";
if (i_RecordCount <= ConvertToInt32((i_pageIndex) i_pagesize))
{
i_pagerString_ENG = i_pagerString_ENG + "<div class='" + i_CssClass + "' style='padding-left:20px;padding-right:20px;float:right'><div style='float:left;padding-right:60px'>Total " + i_RecordCount + " , " + ((i_pageIndex - 1) i_pagesize + 1) + "-" + i_RecordCount + " of " + i_RecordCount + " Records </div><div style='float:left;padding-left:60px'>";
}
else
{
i_pagerString_ENG = i_pagerString_ENG + "<div class='" + i_CssClass + "' style='padding-left:20px;padding-right:20px;float:right'><div style='float:left;padding-right:60px'>Total " + i_RecordCount + " , " + ((i_pageIndex - 1) i_pagesize + 1) + "-" + ((i_pageIndex) i_pagesize) + " of " + i_RecordCount + " Records </div><div style='float:left;padding-left:60px'>";
}
if (i_pageIndex != 1)
{
//i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='" + i_PID + "page=1'> 首页</a> <a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_pageIndex - 1)ToString() + "'>上一页</a>";
i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='" + i_PID + "page=1'> First</a> <a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_pageIndex - 1)ToString() + "'>Prev</a> ";
}
i_pagerString_ENG = i_pagerString_ENG + " [ ";
if (i_StartPageNum > 1)
{
i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_StartPageNum - 1)ToString() + "' title='前十页'><font face='webdings'>7</font></a>";
i_pagerString_ENG = i_pagerString_ENG + " <a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_StartPageNum - 1)ToString() + "' title='Prev Ten'><font face='webdings'>7</font></a>";
}
for (int i_i = i_StartPageNum; i_i <= i_EndPageNum; i_i++)
{
if (i_i != i_pageIndex)
{
i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + i_iToString() + "'>" + i_iToString() + "</a> ";
i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + i_iToString() + "'>" + i_iToString() + "</a> ";
}
else
{
i_pagerString = i_pagerString + "<b><font color=red>" + i_iToString() + "</font></b> ";
i_pagerString_ENG = i_pagerString_ENG + "<b><font color=red>" + i_iToString() + "</font></b> ";
}
}
if (i_EndPageNum < i_Pcount)
{
i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_EndPageNum + 1)ToString() + "' title='下十页'><font face='webdings'>8</font></a>";
i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_EndPageNum + 1)ToString() + "' title='Next Ten'><font face='webdings'>8</font></a>";
}
i_pagerString = i_pagerString + "] 页";
i_pagerString_ENG = i_pagerString_ENG + "] ";
if (i_pageIndex != 1)
{
i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='" + i_PID + "page=1'> 首页</a> <a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_pageIndex - 1)ToString() + "'>上一页</a>";
//i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='" + i_PID + "page=1'> 首页</a> <a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_pageIndex - 1)ToString() + "'>上一页</a>";
}
if (i_Pcount != i_pageIndex)
{
i_pagerString = i_pagerString + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_pageIndex + 1)ToString() + "'> 下一页</a> <a class='" + i_CssClass + "' href='" + i_PID + "page=" + i_Pcount + "'>尾页</a>";
i_pagerString_ENG = i_pagerString_ENG + "<a class='" + i_CssClass + "' href='" + i_PID + "page=" + (i_pageIndex + 1)ToString() + "'> Next</a> <a class='" + i_CssClass + "' href='" + i_PID + "page=" + i_Pcount + "'>End</a>";
}
i_pagerString = i_pagerString + "</div>";
i_pagerString_ENG = i_pagerString_ENG + "</div></div>";
if (_Language == MyEnumLanguageEnglish)
{
return i_pagerString_ENG;
}
else
{
return i_pagerString;
}
}
//将HTML代码加入输出流
protected override void Render(HtmlTextWriter output)
{
baseRender(output);
switch (_DisplayPageing)
{
case MyEnumAlways:
outputWriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID, _CssClass));
break;
case MyEnumAuto:
if (_pageSize < _recordcount)
{
outputWriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID, _CssClass));
}
else
{
outputWriteLine("");
}
break;
case MyEnumNever:
outputWriteLine("");
break;
}
//if (_DisplayPageing == true) outputWriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID, _CssClass));
// outputWriteLine(ThePage(_recordcount, _pageSize, _pageIndex, _PID, _CssClass));
}
}
}
另外,站长团上有产品团购,便宜有保证
最简单的办法,从解决方案管理里把ascx直接拖进aspx设计界面
当然,你也可以在HTML代码里手动添加,如
<uc1:control1id="Control"
runat="server"></uc1:control1>
记得要先注册
<%@
Register
TagPrefix="uc1"
TagName="Control1"
Src="Control1ascx"
%>
呵呵,头一次看见还有这样写的。我明白你的意思,你是想根据request
的id值来判断是加载那一个用户控件。显然你上面的问题出现在你只知道用户控件是如何引入进来的<%@
Register
%>
<uc1:
>
。但不知道它是如何运行,如何被解析的。在aspx页面上这样做是正确的。但你在代码中拼出来<uc1:>就不对了。为什么?你在后台拼出来渲染到页面上的时候,html页面中只是显示字符串"<uc1:>"而矣。最终并未被aspnet解析(也就是并未生成用户控件中的内容)。所以你什么也没有看到。正确的做法是动态加载用户控件。你可以在目标位置放置一个容器控件如PlaceHolder,可以使用UserControl
uc=PageLoadControl("XXascx");
来生成一个用户控件的实例,然后再作为子控件加入到容器控件中
,完整的代码类似:
//假设页面上放置的容器控件PlaceHolder的控件ID为pl
UserControl
uc;
if
(Reqest["id"]=="1")
{
uc=PageLoadControl("1ascx");
}else
if
(Request["id"]=="2")
{
uc=PageLoadControl("2ascx");
}
//添加到容器控件
plAdd(uc);
最简单的方法用hidden控件,aspxcs中定义个public变量tmpPB,保存ckUserID的值,然后aspx页面放一个hidden控件:<input type="hidden" id="h1" value="<%=tmpPB %>" />
这样就可以在ascx里面用js获取到h1的值就是ckUserID的值了:
var ckUserID=documentgetElementByID("h1")value;
我想你说的应该是自定义用户控件吧,在MCV里面是可以继续使用的,
你可以这样在页面调用<% HtmlRenderPartial("控件名称", "我的参数"); %>
在用户控件里面使用Model对象获取你的参数 当然参数可以是任何数据对象你还可以把用户控件定义为强类型 HtmlRenderPartial 还有几个重载 有兴趣可以去看看。
userControl控件在工具箱里面是没有的,这个是用户控件,需要你自己添加新建的。具体的方法是在解决方案窗口中点击添加新项,然后再选择用户控件就行了,后缀是ascx。你可以把你制定好的用户控件放到工具箱里面,方面以后用,建议你先到MSDN了解一下用户控件的定义以及具体的使用方法。
以上就是关于ASP.NET用户自定义控件全部的内容,包括:ASP.NET用户自定义控件、如何在aspx页面中使用ascx控件(用户自定义的一个控件)、asp.net 调用ascx问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)