{$Wap} | 网站首页 | 电脑资料库 | wap资源库 | 建站资源库 | 茂名合租网 | 下载中心 | 美图资源库 | 茂名资源网商城 | 
广告载入中...
〒 您现在的位置: 茂名资源网 >> wap资源库 >> wap教程 >> WAP网站开发 >> wap资源库正文
在ASP.NET中嵌入wml标记 【字体:
作者:佚名    wap资源库来源:不详    点击数:    更新时间:2007-3-31
广告载入中...

昨天解决了这么一个问题,是关于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 += "<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中就可以实现了

[1] [2] [3] 下一页  

收藏此页到:[天极网摘]  [和讯网摘]  [新浪VIVI]  [365key]  [博采中心]  [网摘中国]  [5Seek]  [狐摘 ]  [365Fav]  [热门 ]  [人人网摘]  [我摘]  [YouNote]
广告载入中...

注明
☉本站所有软件和资料大多来自互联网收集整理,仅供学习和研究使用。如有侵犯您版权的,请来信指出,本站将立即改正。
邮址:diyb208%21cn.com请将%换成@
☉下载的压缩包如需要密码的,密码统一为:www.0668idc.com
☉茂名资源网不承担用户因使用这些下载资源和技术教程对自己和他人造成任何形式的损失或伤害。
☉资源下载请使用[FlashGet]下载,否则可能出现下载不了的情况;解压缩请使用[Winrar]。

  • 上一个wap资源库:

  • 下一个wap资源库:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口

    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    站长:落叶有声
    管理员通信方式:信箱地址:diyb208@21cn.com QQ:84805309