如何封装JS和CSS文件为服务器端控件

如何封装JS和CSS文件为服务器端控件,第1张

首先:下载一个JS的日期组件,带封装。

然后:建一个日期类文件CalendarBoxcs代码如下:

using System;

using SystemCollectionsGeneric;

using SystemComponentModel;

using SystemText;

using SystemWeb;

using SystemDrawing;

using SystemWebUI;

using SystemWebUIWebControls;

using SystemWebUIHtmlControls;

[assembly: WebResource("WisesoftWebControlWisesoftCalendarcalendarjs", "application/x-javascript", PerformSubstitution=true)]

namespace WisesoftWebControl

{

[ToolboxBitmap(typeof(CalenderBox), "WisesoftCalendarCalendarBoxico")]

public class CalenderBox : TextBox

{

protected override void OnPreRender(EventArgs e)

{

string calendar = CalenderCSSCSS;

calendar = calendarReplace("$ImaginURL$", thisImaginURL);

if (!PageClientScriptIsClientScriptBlockRegistered("_calendar"))

PageClientScriptRegisterClientScriptBlock(typeof(string), "_calendar", calendar);

thisPagePreRenderComplete += new EventHandler(Page_PreRenderComplete);

thisCssClass = "Wdate";

thisAttributesAdd("onfocus","setday(this)");

thisAttributesAdd("onchange", "checkDate(thisvalue)");

baseOnPreRender(e);

}

void Page_PreRenderComplete(object sender, EventArgs e)

{

PageClientScriptRegisterClientScriptResource(thisGetType(), "WisesoftWebControlWisesoftCalendarcalendarjs");

}

///// <summary>

/// 弹出日期控件小的地址

/// </summary>

[Bindable(true)]

[Category("图标设置")]

[DefaultValue("imagin/calendergif")]

[Localizable(true)]

public string ImaginURL

{

get

{

String s = (String)ViewState["ImaginURL"];

return ((s == null) "imagin/calendergif" : s);

}

set

{

ViewState["ImaginURL"] = value;

}

}

///// <summary>

/// 设置日期,时间的初始格式。

/// </summary>

[Bindable(true)]

[Category("初始化设置")]

[DefaultValue(false)]

[Localizable(true)]

public bool ShowTime

{

get

{

bool s = (bool)ViewState["ShowTime"];

if (ViewState["ShowTime"] != null)

{

return s;

}

return false;

}

set

{

ViewState["ShowTime"] = value;

}

}

///// <summary>

/// 注样式文件

/// </summary>

/// <param name="path"></param>

private void RegisterCssFile(string path)

{

HtmlLink link1 = new HtmlLink();

link1Attributes["type"] = "text/css";

link1Attributes["rel"] = "stylesheet";

link1Attributes["href"] = path;

thisPageHeaderControlsAdd(link1);

}

}

}

注意:[assembly: WebResource("WisesoftWebControlWisesoftCalendarcalendarjs", "application/x-javascript", PerformSubstitution=true)]是用来封装你的JS文件,要使用你项目的名字加上你JS文件的名字,还需要将你的JS文件做一点设置,点右件,选择属性--->然后选择高级,选择生成操作-->选择嵌入的资源,这样才能将JS文件封装进去,当然如果有或者是CSS文件也是一样的。

再看

void Page_PreRenderComplete(object sender, EventArgs e)

{

PageClientScriptRegisterClientScriptResource(thisGetType(), "WisesoftWebControlWisesoftCalendarcalendarjs");

}

是在页面呈现之前将你的JS文件注册到页面上。

[Bindable(true)]

[Category("图标设置")]

[DefaultValue("imagin/calendergif")]

[Localizable(true)]

是利用反射的元数据信息,来设置属性。就是给你的日期控件旁边加上个小图标,把它做成一个属性,可以让程序员自定义设置,也可以把它继承进去。

好了,这样就可以把JS文件封装好了,再来看看CSS文件如何封装并写入客户端。

我们可以看见下面有一个方法,

///// <summary>

/// 注样式文件

/// </summary>

/// <param name="path"></param>

private void RegisterCssFile(string path)

{

HtmlLink link1 = new HtmlLink();

link1Attributes["type"] = "text/css";

link1Attributes["rel"] = "stylesheet";

link1Attributes["href"] = path;

thisPageHeaderControlsAdd(link1);

}

它就是用来注册你的CSS文件的,大家都知道在我们的页面代码里面是<link href="StyleSheetcss" rel="stylesheet" type="text/css" />引入外部样式文件。这个方法就是达到这个目的。那么我们现在还没有样式文件。

因此我们就必须建立一个CSS,然后把它设置一下(和JS的设置方式一样)。再到void Page_PreRenderComplete(object sender, EventArgs e)方法调用就可以了,但是还有其他方法,我们来介绍第二种(对JS文件也可以这样使用),建立一个CalendarCSScs文件,代码如下:

using System;

using SystemCollectionsGeneric;

using SystemText;

namespace WisesoftWebControl

{

public class CalenderCSS

{

public static string CSS = @"<style type=""text/css"">

Wdate{

border:#999 1px solid;

height:18px;

background:url($ImaginURL$) no-repeat right;

}

WdateFmtErr{

font-weight:bold;

color:red;

}

</style>";

}

}

这个类其实是将我们的CSS文件,写为一个字符串形式,然后供主函数调用,以注册到客户端使用。

那么我们再看看CalendarBoxcs文件里的这段代码

string calendar = CalenderCSSCSS;

calendar = calendarReplace("$ImaginURL$", thisImaginURL);

if (!PageClientScriptIsClientScriptBlockRegistered("_calendar"))

PageClientScriptRegisterClientScriptBlock(typeof(string), "_calendar", calendar);

它就是将我们已经写好的一段字符串以快的形式注册到客户端(当然还有更多的注册方式,可以在MSDN看看ClientScript类)。

好了,基本上就可以使用了。

web程序不要妄想对客户机的文件进行读写。ActiveXObject是IE特有的。这种东西本身就是不安全的,现在不允许,今后更不会允许。

假设我做一网站,你来访问,访问了之后我直接在你的磁盘上写上1亿个垃圾txt文件,你咋想?所以不要考虑这个了。读写文件是针对服务器的。

WSGI服务器。WSGI服务器的选择很多,包括uWSGI和gunicorn,它们都可以处理所有的请求,包括由python对象处理的,也包括不是由python对象处理的,比如静态的图像,css,js等文件,理论上可以把整个动态网站都用WSGI服务器承载起来,也就是整个应用完全跑在Application服务器上。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何封装JS和CSS文件为服务器端控件

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情