考虑移动控件的很多不可控因素,和兼容性问题,我选择了手工输出wml加自定义控件的方式,来完成wap开发,动态的内容由自定义的控件加C#来控制,
建立一个web页面WebForm1.aspx,清空里面的html代码,加入下面代码:
============================================================
<%@ Register TagPrefix="uc1" TagName="WmlOut" Src="WmlOut.ascx" %>
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="WebLog.WebForm1" contentType="text/vnd.wap.wml" %>
<%=@"<?xml version=""1.0"" encoding=""utf-8""?>"%>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<card title="title" id="form1">
<p align="left">
本栏目免费试用。hah<br/>
<uc1:WmlOut id="selectBar" runat="server"></uc1:WmlOut>
</p>
</card>
</wml>
第一和第二行代码是加入控件后自动产生的,WmlOut是我自己定义的一个输出字符串的控件,
注意第4行一定要在第5行的前面,也不要放在第1行,不然.net会自动把它乱移到其它行而出现wml代码混乱,
千万注意,每次写完这个文件的代码,编写其它文件前一定ctrl+s一下,不然.net老是要自动把你的内容改乱,比如
<br/>会被改成<br>,很烦.
<uc1:WmlOut id="selectBar" runat="server"></uc1:WmlOut>就是我们加入的自己的控件,可以在cs文件中用C#控制,下面是WebForm1.aspx.cs内容:
================================================
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace WebLog
{
/// <summary>
/// WebForm1 的摘要说明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected WmlOut selectBar;//这里定义了控件实例,就可以引用操控了
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
selectBar.WmlText = //Form1.ClientID + " " + Form1.ID+
"<SELECT ivalue=/"0/">"
+"<OPTION>[栏目快速导航]</OPTION>"
+"<OPTION onpick=/"http://bbs.xxxx.com/">[论坛]</OPTION>/n"
+"<OPTION onpick=/"http://chat.xxxx.com/">[聊天室]</OPTION>"
+"</SELECT><br/>";
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
下面是自定义控件WmlOut.ascx.cs:
=========================================
namespace WebLog
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Web.UI;
/// <summary>
/// WmlOut 的摘要说明。
/// </summary>
public class WmlOut : System.Web.UI.UserControl
{
private string wmlText;
public string WmlText
{
get
{
return wmlText;
}
set
{
wmlText = value;
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器
/// 修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
protected override void Render(HtmlTextWriter output)
{
output.Write(wmlText);
}
}
}