用asp.net开发移动wap网站集成在线wap模拟器

摘要:
newDictionary();ifdataArray[key]=value;elsedataArray.Add;}}//////添加一个键值数据/////////publicvoidAdd{dataArray=dataArray??
下面的代码将演示利用ASP.NET2.0开发WAP模拟器和支持移动设备浏览的网页
用asp.net开发移动wap网站集成在线wap模拟器第1张
注:通过目录下的/moni可以模拟浏览我们制作好的wap网站
我们先实现一个Page类,添加一些于aspx页的交互,因为wap可能不支持viewState吧
Page.cs 注意与System.Web.UI.Page分开
用asp.net开发移动wap网站集成在线wap模拟器第2张用asp.net开发移动wap网站集成在线wap模拟器第3张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceRsion.Web
{
publicabstractclassPage:System.Web.UI.Page
{
privateTempDatas<string,Object>tempData;
publicPage(){BindEvents();}
///<summary>///页面临时数据
///</summary>publicTempDatas<String,Object>TempData
{
get
{
if(tempData==null)tempData=newTempDatas<string,Object>();
returntempData;
}
}
publicPageAdapterHtml
{
get{returnnewPageAdapter(this);}
}
///<summary>///绑定事件
///</summary>protectedvirtualvoidBindEvents()
{
}
}
}
用asp.net开发移动wap网站集成在线wap模拟器第4张用asp.net开发移动wap网站集成在线wap模拟器第5张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Web;
usingRsion.Web;
namespaceRsion.Web
{
publicabstractclassApplication:System.Web.HttpApplication
{
publicstaticTemplateTemplate;
///<summary>///模板缓存时间
///</summary>publicstaticintTemplateCacheTime=10;
///<summary>///重启Web进程
///</summary>publicstaticvoidRestartWebProcess()
{
HttpRuntime.UnloadAppDomain();
}
}
}
创建TempData用于与.aspx页数据交换
用asp.net开发移动wap网站集成在线wap模拟器第6张用asp.net开发移动wap网站集成在线wap模拟器第7张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Collections;
//Author:Sonven
//Blog:Sonven.cnblogs.comnamespaceRsion.Web
{
publicclassTempDatas<TKey,TValue>:CollectionBase
{
privateDictionary<TKey,TValue>dataArray;
publicTValuethis[TKeykey]
{
get
{
if(dataArray.ContainsKey(key))returndataArray[key];
thrownewArgumentException("未添加此数据项进入该集合!","TKey",null);
}
set
{
dataArray
=dataArray??newDictionary<TKey,TValue>();
if(dataArray.ContainsKey(key))dataArray[key]=value;
elsedataArray.Add(key,value);
}
}
///<summary>///添加一个键值数据
///</summary>///<paramname="key"></param>///<paramname="value"></param>publicvoidAdd(TKeykey,TValuevalue)
{
dataArray
=dataArray??newDictionary<TKey,TValue>();
dataArray.Add(key,value);
}
}
}

我们扩展Page类创建一个PageAdapter.cs (用于添加模板支持)

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)

用asp.net开发移动wap网站集成在线wap模拟器第8张用asp.net开发移动wap网站集成在线wap模拟器第9张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Web.UI;
usingSystem.Web;
usingSystem.IO;
usingSystem.Text.RegularExpressions;
namespaceRsion.Web
{
///<summary>///WebPage页面辅助适配器类
///</summary>publicclassPageAdapter
{
privatePagepage;
publicPageAdapter(Pagepage)
{
this.page=page;
}
///<summary>///显示模板

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)


///</summary>///<paramname="partialPath">模板文件路径:不带后缀[模板后缀.tpl]如/bottom将显示Templates下的bottom.tpl文件</param>publicvoidRenderPartial(stringpartialPath)
{
stringtemplateID="Template_"+partialPath.Replace("/","_");
objecto=HttpRuntime.Cache[templateID];
if(o==null)
{
FileInfofi
=newFileInfo(HttpContext.Current.Server.MapPath("~/templates/"+partialPath+".tpl"));
if(!fi.Exists)return;
stringtemplateContent;
using(StreamReadersr=newStreamReader(fi.FullName))
{
templateContent
=sr.ReadToEnd();
}
//转换TransformTemplateTags(reftemplateContent);
//写入缓冲HttpRuntime.Cache.Insert(templateID,templateContent,null,
DateTime.Now.AddMinutes(Application.TemplateCacheTime),TimeSpan.Zero);
HttpContext.Current.Response.Write(templateContent);
}
else
HttpContext.Current.Response.Write(o.ToString());
}
///<summary>///转换模板内容
///</summary>///<paramname="templateContent"></param>privatevoidTransformTemplateTags(refstringtemplateContent)
{
stringtemplateID;
stringpattern=@"\${(\w+)}";
Regexrg
=newRegex(pattern,RegexOptions.IgnoreCase|RegexOptions.IgnorePatternWhitespace);
foreach(Matchminrg.Matches(templateContent))
{
templateID
=Regex.Replace(m.Captures[0].Value,pattern,"$1");
templateContent
=Regex.Replace(templateContent,@"\${"+templateID+"}",
Application.Template.Rules[templateID].ToString());
}
}
///<summary>///转换该页的标签内容

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)


///</summary>publicvoidTransformPageTags()
{
//////TO:DO用asp.net开发移动wap网站集成在线wap模拟器第10张..
///
}
}
}

现在我们要实现可以用于wap的page类了,WapPage.cs

用asp.net开发移动wap网站集成在线wap模拟器第11张用asp.net开发移动wap网站集成在线wap模拟器第12张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.IO;
//Author:Sonven
//Blog:Sonven.cnblogs.comnamespaceRsion.Web
{
publicclassWapPage:Page
{
publicWapPage():base(){}
///<summary>///绑定事件
///</summary>protectedoverridevoidBindEvents()
{
Page.Load
+=delegate(objects,EventArgse)
{
HttpContext.Current.Response.Write(
"<?xmlversion=\"1.0\"?>\r"+"<!DOCTYPEwmlPUBLIC\"-//WAPFORUM//DTDWML1.1//EN\"\"http://www.wapforum.org/DTD/wml_1.1.xml\">\r");};
Page.LoadComplete
+=delegate(objects,EventArgse)
{
HttpContext.Current.Response.ContentType
="text/vnd.Web.wml";
};
//处理错误时候转向错误页面[仅在发布后]#ifDEBUG#else
Page.Error
+=delegate(objects,EventArgse)
{
Session[
"errormsg"]=HttpContext.Current.Error.Message+"<br/>"+"地址:"+HttpContext.Current.Request.RawUrl.ToString();
HttpContext.Current.Response.Redirect(
"~/error.aspx");
};
#endif
Page.PreRender
+=delegate(objects,EventArgse)
{
};
}
}
}

这样就差不多只要继承WapPage就可以实现wap网页开发了
接下来我们创建模板,并给模板加上缓存提高性能
Application.cs用于提供缓存时间

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)

用asp.net开发移动wap网站集成在线wap模拟器第13张用asp.net开发移动wap网站集成在线wap模拟器第14张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Web;
usingRsion.Web;
namespaceRsion.Web
{
publicabstractclassApplication:System.Web.HttpApplication
{
publicstaticTemplateTemplate;
///<summary>///模板缓存时间
///</summary>publicstaticintTemplateCacheTime=10;
///<summary>///重启Web进程
///</summary>publicstaticvoidRestartWebProcess()
{
HttpRuntime.UnloadAppDomain();
}
}
}

接下来我们创建一个单独的Template项目先
在里面创建Template.cs,ParamRules
ParamRules实现如下:

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)

用asp.net开发移动wap网站集成在线wap模拟器第15张用asp.net开发移动wap网站集成在线wap模拟器第16张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Collections;
namespaceRsion.Web
{
///<summary>///模板参数规则类
///</summary>publicclassParamRules:IEnumerable
{
privateDictionary<string,object>rules;
publicParamRules()
{
if(rules==null)rules=newDictionary<string,object>();
}
publicobjectthis[stringparamKey]
{
get
{
if(rules.ContainsKey(paramKey))returnrules[paramKey];
return"";
}
set
{
if(rules.ContainsKey(paramKey))rules[paramKey]=value;
elserules.Add(paramKey,value);
}
}
///<summary>///添加新的规则
///</summary>///<paramname="paramKey"></param>///<paramname="paramValue"></param>publicvoidAdd(stringparamKey,objectparamValue)
{
if(rules.ContainsKey(paramKey))
thrownewArgumentException("对不起规则已经存在!Key:"+paramKey+",Value:"+rules[paramKey].ToString(),"paramKey");
rules.Add(paramKey,paramValue);
}
publicvoidRemove(stringparamKey,objectparamValue)
{
if(rules.ContainsKey(paramKey))
rules.Remove(paramKey);
}
#regionIEnumerable成员publicIEnumeratorGetEnumerator()
{
foreach(KeyValuePair<string,object>kinrules)
{
yieldreturnk;
}
}
#endregion
}
}

Template.cs实现如下:

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)

用asp.net开发移动wap网站集成在线wap模拟器第17张用asp.net开发移动wap网站集成在线wap模拟器第18张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
namespaceRsion.Web
{
///<summary>///模板
///</summary>publicclassTemplate
{
publicstaticTemplate_template;
privatestaticParamRulesrules;
privateTemplate(){}
publicstaticTemplateCreateInstance()
{
if(_template==null)_template=newTemplate();
return_template;
}
publicParamRulesRules
{
get
{
if(rules==null)rules=newParamRules();
returnrules;
}
}
}
}

这样我们先在global.asax中填加一些模板数据,这样才可以解析模板,解析模板的功能实现在PageAdapter中,这样可以
在本页面直接调用Html.RenderPartial("template")调用
gobal.asax

用asp.net开发移动wap网站集成在线wap模拟器第19张用asp.net开发移动wap网站集成在线wap模拟器第20张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.SessionState;
usingRsion.Web;
usingc=Rsion.Web.Config;
namespaceRsion.Wap
{
publicclassGlobal:System.Web.HttpApplication
{
protectedvoidApplication_Start(objectsender,EventArgse)
{
InitTemplate();
//初始化模板数据,只针对那些不经常变化的数据}
#regionevents
protectedvoidSession_Start(objectsender,EventArgse)
{
}
protectedvoidApplication_BeginRequest(objectsender,EventArgse)
{
}
protectedvoidApplication_AuthenticateRequest(objectsender,EventArgse)
{
}
protectedvoidApplication_Error(objectsender,EventArgse)
{
}
protectedvoidSession_End(objectsender,EventArgse)
{
}
protectedvoidApplication_End(objectsender,EventArgse)
{
}
#endregionprivatevoidInitTemplate()
{
global::Rsion.Web.Templatet=Template.CreateInstance();
//添加模板数据规则,只用于不常更新的数据如key=webname则{$webname}替换成valuet.Rules.Add("webname",c.Web.Current.WebName);
t.Rules.Add(
"weburi",c.Web.Current.WebUri);
t.Rules.Add(
"sysname","sonven'swapdevelopframework!");
Rsion.Web.Application.Template
=t;
//模板缓存过期时间(分钟)(默认10分钟)Rsion.Web.Application.TemplateCacheTime=0;
}
}
}

(rsion.com,锐讯,巴中广州佛山成都网站建设,newmin,new.min,new.min@msn.com,newmin.net,巴中网站建设tel:18608275575锐讯)

然后着手开发wap项目了
首先新建一个default.aspx,default.aspx.cs
两文件如下

用asp.net开发移动wap网站集成在线wap模拟器第21张用asp.net开发移动wap网站集成在线wap模拟器第22张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingRsion.Web.Config;
usingRsion.Web;
namespaceRsion.Wap
{
publicpartialclassDefault:WapPage
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!Page.IsPostBack)
{
TempData.Add(
"webname",Gobal.Web.WebName);
TempData.Add(
"webUri",Gobal.Web.WebUri);
}
}
}
}

default.aspx

用asp.net开发移动wap网站集成在线wap模拟器第23张用asp.net开发移动wap网站集成在线wap模拟器第24张Code
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="Rsion.Wap.Default"%><wml><head></head><cardtitle="<%=TempData["webname"]%>"><%Html.RenderPartial("top");%><%Html.RenderPartial("index");%>
数据绑定用
&lt;%=TempData[id]%&gt;<br/><br/>调用显示模板&lt;%Html.RenderPartial(&quot;<br/>模板在Templates下的路径不包括.tpl)<br/>
模板中用:${templateId}代替符号
<br/>
然后在使用Rsion.Web.Application.
<br/>Template.Rules.Add(templateID,value)<br/>
就可以调出value值了
!<%Html.RenderPartial("bottom");%></card></wml>

怎么样呢是不是很简单,接着创建模板
文件放在/Templates/下哦,文件扩展为.tpl
bottom.tpl

<br/><ahref="/">首页</a>|
<ahref="http://www.cnyolee.com">有理网</a>|
<ahref="http://sonven.cnblogs.com">博客园</a>|
<ahref="http://www.rsion.com">联系我</a><br/>
${webname}${weburi}

同理创建其他的模板
我们在Page类里面实现了友好的自定义错误页,我们创建显示这个页面的error.aspx
error.aspx

用asp.net开发移动wap网站集成在线wap模拟器第25张用asp.net开发移动wap网站集成在线wap模拟器第26张Code
<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Error.aspx.cs"Inherits="Rsion.Wap.Error"%><wml><cardtitle="对不起出错了!">
手机锐讯网Web.rsion.com
<br/>
错误信息:
<br/><%=TempData["errormsg"]%></card></wml>
用asp.net开发移动wap网站集成在线wap模拟器第27张用asp.net开发移动wap网站集成在线wap模拟器第28张Code
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Web;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingRsion.Web;
namespaceRsion.Wap
{
publicpartialclassError:WapPage
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(!Page.IsPostBack)
{
this.TempData["errormsg"]=Session["errormsg"]??"系统执行出错!";
}
}
}
}

Ok了接下来就该验收结果了,达开/moni在里面输入你的地址就可以看到wap已经可以正常在浏览器中显示了
关于模拟器的实现请看我的另篇文章
点此下载该项目代码

免责声明:文章转载自《用asp.net开发移动wap网站集成在线wap模拟器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇discuz 论坛配置 QQ/163 网易邮箱XAML学习笔记——Layout(四)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

css设置文字多余部分显示省略号

如果只显示一行,则可以使用以下方法:  overflow:hidden;  text-overflow:ellipsis;  white-space:nowrap;如果需要显示多行,在需要设置的元素style中添加以下代码:  word-break:break-all;  text-overflow:ellipsis;  display:-webkit-bo...

Qt使用镜像源快速安装与更新

如果我们选择在线安装模式,那就更麻烦了,因为下载速度一般不慢。事实上,在中国,Qt图片来源很多,但很少有人使用。原因是Qt图像源做得不好。如果我们导入它,它将自动链接到官方图像源。因为它已经从官方来源同步,没有更改,所以我们无法逐个添加补丁,这太麻烦了。好吧,让我停止胡说八道。让我告诉你如何使用国产Qt图像源。...

移动通信网络中的 GTP 协议

在EPSUP中使用GTP的优点之一是GTP具有固有的可识别隧道机制和GTP可以为UE提供的移动性。注意:GTPv2-U协议不存在。GTP-C协议GTP-C是GTP的控制平面,使用UDP端口2123。在EPS中,GTPv2-C协议负责创建、维护和删除S1、S5/S8和其他接口上的GTP-U隧道。它是一种基于IP的隧道协议,允许在GTP UProtocolEnt...

html,js简单保存textarea换行格式

有时我们需要在提交表单时保存html标记,但textarea不保存换行信息,因此我们需要使用js保存HTM标记,例如textarea的换行。˃˃g、 “”);这只是一个允许在js中保留HTML文本区域中的换行符和其他格式的模型。你需要开发它来满足你的需求。希望岑溪网站开发分享的内容对您有所帮助!...

安装samba服务器实现Linux mint和Windows共享文件

安装samba服务器以实现Linuxmint和Windows共享文件。在Linuxmint普通用户下执行命令:sudoapt-geinstallsamba、installsamba和打开smb。conf配置文件,并执行命令gedit/etc/samba/smb-Coff,如果您想安装gedit(sudoapt-geinstallgedit),还可以使用Lin...

mysql状态查看 QPS/TPS/缓存命中率查看

showglobalstatusslike'Com_ commit';showstatslike“无缓冲池读取%”;Thread_cache_Hits=(1-Thread_created/connections)*100%(8)锁定状态mysql&gt;showstatslike“Binlog_缓存%”;...