ASP.NET用户自定义控件

ASP.NET用户自定义控件,第1张

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问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/9819101.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存