2 扩展名:.wml MIME类型:text/vnd.wap.wml
3 扩展名:.wbmp MIME类型:image/vnd.wap.wbmp
4 扩展名:.wmls MIME类型:text/vnd.wap.wmls
5 扩展名:.wmlc MIME类型:application/vnd.wap.wmlc
编写手机网页
有问题HI我
用什么开发都不重要,重要的是输出。只要严格按照wap相关规范来输出就可以了。当用户访问的时候,只是读取到你程序所输出的wap代码,并非html代码。
第一步,构建WAP服务器,可以直接使用iis来搭建,创建一个新的MIME类型以支持WML语言的解析。具体办法网上很多,你可以自己搜索一下。
第二步,使用C#来编写好程序,并输出wml类型文件,注意编码统一。代码格式都要符合wml标准。具体的范例和教程网上也很多,你可以搜索一下。
第三步,构建模拟手机客户端,有很多的模拟器,像Opera之类的,都有pc端。可以去下载安装即可。
再强调一点,wml文件和html文件格式完全不同的。千万注意,用c#输出文件时注意编码统一。
1、直接利用Response。就是在该MobileWebForm的Page_Load里面填写 string aa = "<card id=\"card1\" title=\"Title\">"aa += "<P>"aa += "<anchor title=\"back\">返回<prev/></anchor>"aa += "</P>"Response.Write(aa)当然应该加一些设备兼容性的工作,这里省略。 这样做的问题是,这样写出来的东西肯定是在页面的最顶端。 2、利用Application_EndRequest 要想将内容放到最后,就要在Response的内容Render完之后再添加,不过直接将上面的代码放到这个事件中,在Openwave中却显示不出来,可能是因为openwave认为这个card已经在结束标志之后了,所以这样做了一下。 在Page_Load中写 string aa = "<card id=\"card1\" title=\"Title\">"Response.Write(aa)然后再EndRequest中写 if(this.Request.FilePath.IndexOf("yourmobileform.aspx") != -1) { string aa += "<P>"aa += "<anchor title=\"back\">返回<prev/></anchor>"aa += "</P>"Response.Write(aa)} 就把Openwave骗过去了 3、使用DeviceSpecific控件。 这种方法属于正统解决方法。在Form上拖一个Devicespecific控件,设计为 <mobile:DeviceSpecific id="DeviceSpecific2" runat="server"><Choice Filter="isWML11"><FooterTemplate><P><anchor title="back">返回<prev /></anchor></P></FooterTemplate></Choice></mobile:DeviceSpecific>可能是我不怎么会用Openwave的缘故,openwave不理会我上面的东西。后来就自己加了一个设备筛选器,判断isMobileDevice=true。这样就可以了。 用<FooterTemplate>放在最后,用<HeaderTemplate>和<ScriptTemplate>都放在最上面了。 4、还有就是写自己的Adapter,这个从略,我试过HtmlAdapter,没问题,但是写了一个Wml的Adapter, openwave不理会的,搞不大明白openwave究竟接收什么类型的东西。 做一些补充,前面说的都是放在最前或者最后,要是放在中间怎么办。 可以在Form上放一个Panel,然后将这个DeviceSpecific放在这个panel中,然后在<ContentTemplate>中放wml内容 <P><anchor title="ddd">3eee<prev /></anchor></P> 这后面就可以放你要放的东西了 比如<mobile:Label id="Label1" runat="server">Label</mobile:Label> 可是这个Label不能被代码访问到,所以需要手动添加事件 <mobile:Label id="Label1" runat="server" OnLoad="SetText">Label</mobile:Label> 然后在.cs中加入这个函数实现 public void SetText(object sender,System.EventArgs e) { (sender as System.Web.UI.MobileControls.Label).Text = "dkkd" } 继续更新(2004.9.9) 要放在中间,不一定要用DeviceSpecific,我们可以使用自定义控件来实现,比如我们可以从Label派生一个出来,然后重载OnRender protected override void OnRender(System.Web.UI.HtmlTextWriter writer) { if(this.MobilePage.Device.PreferredRenderingType == "xhtml-mp" || this.MobilePage.Device.PreferredRenderingType == "wml11") { writer.WriteBeginTag("anchor")writer.Write(" title=\"" + this.title + "\">" + this.Text)writer.WriteBeginTag("prev")writer.WriteEndTag("prev")writer.WriteEndTag("anchor")} else base.OnRender(writer)} 然后将这个控件拖到Form中就可以实现了欢迎分享,转载请注明来源:夏雨云
评论列表(0条)