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