今天总算知道要如何做才能让XSP正确的显示中文.答案就是 CodeBehind .yes 就是它.
今天在调试一个页面的时候发现的.如下面的代码.
public class CodeBehind_aspx : System.Web.UI.Page, System.Web.SessionState.IRequiresSessionState {
......
protected override void FrameworkInitialize() {
base.FrameworkInitialize();
this.ResponseEncoding = "gb2312";
this.ContentType = "text/html";
this.TraceModeValue = System.Web.TraceMode.SortByTime;
this.Request.ValidateInput();
this.__BuildControlTree(this);
}
.....
}
这个class并不是我写的而是JIT根据我写的ASPX文件自动动态生成的。其中它覆盖FrameworkInitialize方法
在这个方法中this.ResponseEncoding = "gb2312"; 已经指定要使用 GB2312 Encoding 所以我想 XSP 是可以支持
中文的. 既然决定要用 CodeBehind 所以就必须要将页面与代码分离开来写.可能很多人会不习惯在没有 VS 的环境下来 CodeBehind
(被MS宠坏的programmers).在这我还是推荐大家用DW来写ASPX页面,用Sharpdevelop来写DLL. SharpDevelop有个很好的功能就是
在编译的时候可以选择目标框架是什么,如果你选择目标框架是Mono1.1,那么它会使用MCS来编译。
ASPX Code:
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" Inherits="MonoCodeBehind.Welcome" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Mono CodeBehind</title>
</head>
<body>
<form id="Frm1" name="Frm1" method="post" runat="server">
<asp:Label ID="label" runat="server"></asp:Label>
<p>中国<p>
<asp:TextBox ID="text" runat="server" />
<p><asp:Button ID="but" runat="server" />
</form>
</body>
</html>
这里我特意留下<p>中国<p> 用于比较
然后在SharpDevelop中新建一个工程,设置编译成DLL和目标框架使用Mono1.1
Dll Code:
/*
* Created by SharpDevelop.
* User: root
* Date: 2006-10-12
* Time: 14:01
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace MonoCodeBehind
{
public class Welcome : Page
{
//申明组件的时候一定要用 protected
//因为Web框架会使用反射来寻找
//protected的组件
protected Label label=new Label();
protected TextBox text =new TextBox();
protected Button but =new Button();
protected override void OnInit(EventArgs e)
{
this.InitComponent();
base.OnInit(e);
}
private void InitComponent()
{
this.Load+= new EventHandler(this.Page_Load);
this.but.Click += new EventHandler(this.Button_Click);
}
private void Page_Load(Object sender,EventArgs e)
{
label.Text="我是label";
text.Text="我是TestBox";
but.Text="我是按钮按钮";
Response.Write("Response.Write() 中国");
}
private void Button_Click(Object sender,EventArgs e)
{
text.Text="按钮被按下了";
}
}
}
然后编译该文件,将生成的DLL放到与ASPX文件同级的BIN目录下面
然后就启动XSP 设置 --root 等等
看吧中文出来了~