首 页WAP教程WAP源码WAP电子书客户留言龙腾电脑维修网158网络电视本站论坛繁體中文
设为首页
加入收藏
联系我们
您当前的位置:WAP开发网 -> WAP教程 -> ASP.net WAP开发教程 -> 文章内容 退出登录 用户管理
栏目导航
· ASP WAP开发教程 · ASP.net WAP开发教程
· PHP WAP开发教程 · WML教程
· JSP开发WAP教程 · WAP 2.0
· 综合杂谈
热门文章
· WAP 2.0教程
· WML语言基础(WAP建站...
· 用VS2005实现ASP.NE...
· [组图] php WAp开发教程
· WML语言基础(WAP建站...
· VS.NET 2003开发移动...
· [图文] ASP技术进行动态WAP...
· [图文] WML语言基础(WAP建站...
· asp.net移动控件开发...
· [图文] 创建移动Web应用程序...
相关文章
· [图文] ASP.NET移动开发之S...
· ASP.NET 2.0移动开发...
· ASP.NET 移动 Web 窗...
· asp.net移动控件开发...
· ASP.NET 2.0移动开发...
· Wap页面使用asp.net...
· ASP.NET 2.0移动开发...
· ASP.NET 2.0移动开发...
· asp.net2.0移动控件...
· asp.net对wap的开发...
在ASP.NET中嵌入wml标记
作者:不详  来源:本站整理  发布时间:2006-4-4 15:03:21  发布人:tangyunfei

减小字体 增大字体


昨天解决了这么一个问题,是关于Mobile Control的。
用ASP.NET开发WAP程序,使用Mobile Control很方便,也比较容易上手,可是有时候想利用wml的一些元素,有不想很费劲的写adapter。比如:想在页面中添加一个wml的prev元素,如果用wml直接写就可以写成 <anchor title="Back">Back<prev /></anchor>
可是在一个mobile form中如何添加呢?我试了这么几种方法:
1、直接利用Response。就是在该MobileWebForm的Page_Load里面填写
string aa = "<card id=\"card1\" title=\"Title\">";
aa += "

";
aa += "<anchor title=\"back\">返回<prev/></anchor>";
aa += "

";
Response.Write(aa);[/Table]
当然应该加一些设备兼容性的工作,这里省略。
这样做的问题是,这样写出来的东西肯定是在页面的最顶端。
2、利用Application_EndRequest
要想将内容放到最后,就要在Response的内容Render完之后再添加,不过直接将上面的代码放到这个事件中,在Openwave中却显示不出来,可能是因为openwave认为这个card已经在结束标志之后了,所以这样做了一下。
在Page_Load中写
string aa = "<card id=\"card1\" title=\"Title\">";
Response.Write(aa);[/Table]然后再EndRequest中写
if(this.Request.FilePath.IndexOf("yourmobileform.aspx") != -1)
{
string aa += "

";
aa += "<anchor title=\"back\">返回<prev/></anchor>";
aa += "

";
Response.Write(aa);
}[/Table]
就把Openwave骗过去了
3、使用DeviceSpecific控件。
这种方法属于正统解决方法。在Form上拖一个Devicespecific控件,设计为
[Table] <mobile:DeviceSpecific id="DeviceSpecific2" runat="server">
<Choice Filter="isWML11">
<FooterTemplate>


<anchor title="back">返回<prev /></anchor>


</FooterTemplate>
</Choice>
</mobile:DeviceSpecific>


可能是我不怎么会用Openwave的缘故,openwave不理会我上面的东西。后来就自己加了一个设备筛选器,判断isMobileDevice=true。这样就可以了。
用<FooterTemplate>放在最后,用<HeaderTemplate>和<ScriptTemplate>都放在最上面了。
4、还有就是写自己的Adapter,这个从略,我试过HtmlAdapter,没问题,但是写了一个Wml的Adapter, openwave不理会的,搞不大明白openwave究竟接收什么类型的东西。

做一些补充,前面说的都是放在最前或者最后,要是放在中间怎么办。
可以在Form上放一个Panel,然后将这个DeviceSpecific放在这个panel中,然后在<ContentTemplate>中放wml内容

<anchor title="ddd">3eee<prev /></anchor>


这后面就可以放你要放的东西了
比如<mobile:Label id="Label1" runat="server">Label</mobile:Label>
可是这个Label不能被代码访问到,所以需要手动添加事件
<mobile:Label id="Label1" runat="server" OnLoad="SetText">Label</mobile:Label>
然后在.cs中加入这个函数实现
[Table]public void SetText(object sender,System.EventArgs e)
{
(sender as System.Web.UI.MobileControls.Label).Text = "dkkd";
}



继续更新(2004.9.9)
要放在中间,不一定要用DeviceSpecific,我们可以使用自定义控件来实现,比如我们可以从Label派生一个出来,然后重载OnRender
[Table]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中就可以实现了
[] [返回上一页] [打 印] [收 藏]
下一篇文章:PHP做WAP的总结
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 管理登录
Copyright © 2002-2005 wapkf.com. All Rights Reserved .
浙ICP备06013604号|站长QQ:274273595