asp.net如何能是有哪些数据库库里的文章按原来的格式显示在网页上

ASP.NET从数据库中读取的新闻内容怎么显示在网页上?_百度知道
ASP.NET从数据库中读取的新闻内容怎么显示在网页上?
VS2008(使用,从数据库中读出了一段新闻内容(包含换行符)。我试过在CSS中设置word-break和word-wrap,我使用的是IE8)?说一下我的开发环境。但是都有一个问题。请问如何显示才能保证新闻内容自动适应div的宽度而自定换行呢,但是无效(不确定是否是浏览器的问题具体的说.Net 2,那么这个div就会被撑开。我尝试过使用Label显示,也试过直接将这段新闻内容嵌入一个DIV中:当内容中某一行文字的宽度超过了div设置的宽度
提问者采纳
比如 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa浏览器会把它看做一个单词,添加的内容会保留原来的格式如果新闻内容 全是 英文或数字之间没有空格 可能显示会不正常,还可以自己设计格式,如果是汉字或者字符串间有空格就能断开另外你添加新闻是可以用一些第三方控件比如freetextbox或dotnettextbox,这一点很正常,所以不会断开,就想word一样
提问者评价
看了这么多答案,就你一个能理解的提问啦。其实我添加和编辑就是用FreeTextBox。谢谢大家的回答。
其他类似问题
为您推荐:
其他4条回答
专业人士为你解答哈!呵呵,玩笑,你用table吧,把table的宽设为固定值,超过部分知道自动换行的
用x%来设定div内的文字宽度!!!
楼上那位做广告了么?
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁如何用ASP.NET创建你的第一个网页
&&没有公告
地址:深圳市宝安区46区海滨广场十栋一楼() ★深圳市希之光收费系统总代理★
★易游平台深圳市宝安区总代理★
★网吧配件专营店★
★更专业的网吧一条龙服务★
网吧买卖(大客户):8
网站/广告/业务: 售后:2
24小时值班电话:2
专 题 栏 目
焦 点 图 文
没有任何图片文章
相 关 文 章
您现在的位置:&&>>&&>>&&>>&正文
如何用ASP.NET创建你的第一个网页
作者:佚名 点击数:1975 更新: 9:06:55&&&热&&&&&★★★ 【字体: 】
如果你是一个经验丰富的ASP/ADO开发员但又没有尝试过.NET,那么最好现在就开始试一试。为了让你体会到.NET,我们将把微软Access数据库(你也可以SQL Server或者Oracle数据库替代)连接到互联网并检索和显示某些数据。这个例子即需要Information Internet Services(IIS)也需要.NET框架。你可以在这儿下载.NET框架。如果你想试用免费的APS.NET开发环境,那么可以从Web Matrix下载它。
对服务器控件的介绍&
动态服务器页面(Active Server Page,ASP)是微软第一个用于连接数据库和Web的Web技术。ASP.NET完全是其传统语言(即ASP)的重写。你可以同时使用这两者,这是因为两者文件的扩展名相区别(.NET页使用的是.aspx扩展名,而ASP使用.asp扩展名)。
你在ASP.NET中写的大多数代码将在Web服务器上运行,但返回到客户的仅仅是HTML。幸好,.NET提供了许多与标准HTML控件相似的新控件,如下拉式列表和文本框。表A列出了最常用的服务器(server)控件。
常见server控件 控件& 功能 &asp:Button id="button1" Text="Press" runat="server" onClick="submit"/& 在页面上创建一个标准按钮 &asp:Calendar runat="server" /&& 创建日历(calendar) &asp:DropList id="list1" runat="server"&& 创建一个下拉式列表 &asp:ListBox id="listbox" rows="4" runat="server"&& 创建基本列表框 &asp:TextBox id="txtbox" runat="server" /&& 创建标准文本框
.NET服务器控件有一个优点,即它是创建在Web服务器上(而不是像HTML那样在页面中创建控件)。因此,它们可以在发送到客户之前进行处理。例如,你既可以在页中也可以在服务器端进行内容验证。这也就意味着你可以在页中验证内容,然后在服务器端重新进行验证。 在大多数情况下,你可以通过简单的添加组件的方法来创建一个.NET控件:runat="server"
与之对应的HTML元素代码如下:&asp:control_name id="controlID" runat="server" /&
有些开发工具的用法甚至更简单。例如,Visual Studio .NET可以让你通过拖放Web页上的控件来创建服务器控件。
除了这些服务器端的标准HTML控件,ASP.NET还提供了一套验证控件(validation controls):
RequiredFieldValidation控件请求一个数值。 CompareValidator控件比较两个控件中的数值,如当用户被要求两次输入电子邮件地址时,用来验证两次输入是否相同。 RangeValidator控件用来判断条目值是否在一个值域之内。 RegularExpressionValidator控件用正则表达式来验证控件输入。 CustomValidator控件用来让你输入验证码。 Validation Summary用来显示一个页面所用到的所有正确的验证的清单。 使用ADO.NET&
你或许熟悉ADO,不过ADO.NET却是一种全新的语言。但是没有关系,这两者之间有足够多的相似之处,学会如何使用新的对象并不是困难的事。连接到数据库一共有三个步骤:
1. 导入一个.NET名字空间来建立连接。 2.创建一个ADO.NET DataReader对象来获取数据。 3.创建一个ADO.NET Repeater对象来显示数据。
对.NET来说,名字空间是一个新的概念,所以在ADO中没有和它对应的东西。在ADO中,连接是通过提供字符串和一个Connection或者Command对象来建立起来的。DataReader对应于ADO的Recordset;而Reperter是一个server控件,它用来在一个模板的基础上显示数据。
创建ADO.NET连接
为了从数据库中检索数据,你需要ADO.NET。如果你熟悉IIS和Web文件层次,那么你可能不需任何帮助就可以建立一个例子。你也可以按照我们的演示过程去做,先把Northwind(一个Access数据库例子)拷贝到你的本地硬盘中。我们的例子在一个名为nettest的Web文件夹下。拷贝粘贴(或者输入)下面的代码到一个文本编辑器中并把它保存为nettest.aspx。
现在,导入一个.NET名字空间,这样你就可以使用OLEDB数据库了:&%@ Import Namespace="System.Data.OleDb" %&
PageLoad事件将执行连接到Northwind数据库的代码,Server.mappath将返回包含该数据库的物理路径,如代码清单A所示。
连接字符串
如果你想连接到SQL Server(用一个OLEDB连接),你可以使用下面的语句:"Provider=Data Source=MInitial Catalog=NorthWIntegrated Security=SSPI;"
如果你用的是Oracle,你可以用下面的语句:"Provider=Data Source=OracleDataBUser Id=YourUserNPassword=YourP"
<提供了许多关于连接的信息,其中包含了每种可能情况下的连接字符串。
创建ADO.NET对象&
下一步就是创建一个DataReader对象,它用来保存你希望显示的数据。下面的代码使用了Command对象的ExecuteReader方法,这样就创建了一个保存了Northwind客户数据库中所有记录的DataReader对象。cnn.Open()sql="SELECT CompanyName, ContactName, Address, City FROM Customers"cnn=New OleDbCommand(sql,cnn)dbread=cnn.ExecuteReader()
用Reaperter控件来显示数据
现在,通过绑定上一步创建的DataReader对象,你就可以用一个Reperter控件来显示数据。Reaperter控件可以让你创建一个简单的模板(例如,HTML表),对查询所返回的每行数据都重复这个操作。
用HerderTemplate块来创建初始的表结构;数据将出现在ItemTemplate(表的行和列)块中。例如,下面的代码为我们的客户数据创建一个表头,它用来指示早先SQL语句所返回的字段:&HeaderTemplate&&table border="1" width="100%"&&tr&&th&CompanyName&/th&&th&ContactName&/th&&th&Address&/th&&th&City&/th&&/tr&&/HeaderTemplate&
与其它的ASP.NET对象不同,Repeater对象没有现成的布局(layout)和样式;你必须定义你自己的布局和样式。返回数据的每一行都显示在ItemTemplate块中。下面的脚本中每一个字段都包含了一个单元(cell)(在HTML表中):&ItemTemplate&&tr&&td&&%#Container.DataItem("CompaName")%&&/td&&td&&%#Container.DataItem("ContactName")%&&/td&&td&&%#Container.DataItem("Address")%&&/td&&td&&%#Container.DataItem("City")%&&/td&&/tr&&/ItemTemplate&
模板代码在HTML的body标签中而在脚本定义之外&#8212;&#8212;虽然你不能从上面的例子中看出这一点。
浏览.NET页
清单B中的代码用来在浏览器中显示客户数据(用HTML表模板显示各个数据条目)。
把这些脚本复制粘贴到任何一个文本编辑器中,并保存为.aspx格式的文件。然后把该文件另存或者拷贝到Web根目录下(本例的根目录为wwwroot\nettest)。启动你的浏览器并输入合适的地址,这样打开了这个文件。当浏览器载入该文件后(如图A所示),浏览器将显示一个简单的HTML网页,其中包含了SQL语句的请求所返回的数据。
浏览器中的.NET页面
你还可以改进页面的外观。例如,通过添加其它模板块来改变每行的颜色。AlternatingItem.Template块可以改变每一个表单元的背景颜色。下面的脚本会把单元的背景改成黄色(FFFF00):&AlternatingItemTemplate&&tr bgcolor="#FFFF00"&&td&&%#Container.DataItem("companyname")%&&/td&&td&&%#Container.DataItem("contactname")%&&/td&&td&&%#Container.DataItem("address")%&&/td&&td&&%#Container.DataItem("city")%&&/td&&td&&%#Container.DataItem("Region")%&&/td&&/tr&&/AlternatingItemTemplate&
为了对其它所有行起作用,把AlternatingItemTemplate块放到ItemTemplate块之后。
小节尽管.NET并不是特别新鲜的东东,但如果你还没有实现从传统ASP到ASP.NET的跳跃,那么现在开始也不迟。如果你在ASP和ADO领域有着丰富的经验,那么这个转换将会相当的简单。
文章录入:秘密花园&&&&责任编辑:秘密花园&
上一篇文章: 下一篇文章:
【】【】【】【】【】
  网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
公司地址:深圳市宝安区46区海滨广场十栋一楼 电话/传真:2(总) 8(分) 网站管理:Copyright & 2005 - 2008 . All Rights Reserved 深圳市新联盈网络科技有限公司 &深圳网吧联盟& 版权所有在ASP.NET 2.0中,如何把二进制流(数据库类型是Image)还原成图片,显示在网页上?
在ASP.NET 2.0中控件image没有方法formStream();那如何把二进制文件转换为图片,各位MVP指导一下!
(发件人:Visual C#)
知识改变命运,奋斗成就人生!
已标记为答案
您好,可以将Image控件的src指向一个动态生成图片的网页或ashx。具体请参考:配合X.X.Y版主提供的,就可以完成您想要的功能。希望有帮助。
已标记为答案
知识改变命运,奋斗成就人生!
这样无法控制图片的位置,能不能使用Image控件!
&img src=&xxxx.aspx& /& 这里放在什么位置都可以啊
已标记为答案
知识改变命运,奋斗成就人生!
已标记为答案
知识改变命运,奋斗成就人生!
这样无法控制图片的位置,能不能使用Image控件!
您好,可以将Image控件的src指向一个动态生成图片的网页或ashx。具体请参考:配合X.X.Y版主提供的,就可以完成您想要的功能。希望有帮助。
已标记为答案
知识改变命运,奋斗成就人生!
这样无法控制图片的位置,能不能使用Image控件!
&img src=&xxxx.aspx& /& 这里放在什么位置都可以啊
已标记为答案
Microsoft 正在进行一项网上调查,以了解您对 Msdn 网站的意见。如果您选择参加,我们将会在您离开 Msdn 网站时向您显示该网上调查。是否要参加?
<input type="hidden" id="hdnTrackerText" value="请不要关闭此窗口。谢谢!完成访问时,调查将显示在此处,所以请不要关闭此窗口。" />ASP程序执行时网页显示乱码或问号的解决方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
喜欢此文档的还喜欢
ASP程序执行时网页显示乱码或问号的解决方法
阅读已结束,如果下载本文需要使用
想免费下载本文?
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢随笔 - 60&
评论 - 5770&
&&&&&&&&&&&
经常发现有人被乱码困扰着,而我感觉比较幸运,很少为此烦恼过。
在这篇博客中,我将把我想到的一些与乱码有关的经验总结出来,供大家参考。
页面显示乱码问题
在一个网站中,有些页面会正常显示,然而,有些页面会显示成乱码。
如果发生这种情况,可以检查一下web.config和文件编码。
如果web.config是这样配置的:
&globalization fileEncoding="utf-8" /&
而文件的编码不是UTF-8:
那么就会有乱码问题。
注意:反之是不是会出现乱码的。
1. 不设置fileEncoding,此时不会有乱码现象。
2. fileEncoding="gb2312",文件以utf-8编码,此时也不会有乱码现象。
因此,我建议最好让所有文件都以UTF-8编码保存,从而解决这类乱码问题。
AJAX提交的数据乱码问题
AJAX技术流行了这么多年了,我想现在没有几个网站不使用这种技术的。
然而,有些人在使用AJAX时,遇到了乱码问题。
通过分析这类乱码案例中,我发现几乎都是采用这种方式向服务端提交数据:
“key1=” + escape(value1) +“&key2=” + escape(value2)
这种方法在多数情况下,的确能够正常工作,然而遇到一些特殊字符,就行不通了。原因我后面再来解释。
我为这类不正确的方法准备了一个示例 (为了保持示例简单,我演示一个拼接URL),
页面代码如下:
&p&&a id="link2" href="#" target="_blank"&escape&/a&&/p&
&script type="text/javascript"&
var str = "aa=1&bb=" + escape("fish li + is me.") + "&cc=" + escape("大明王朝1368");
$("#link2").attr("href", "/test_url_decode.ashx?method=escape&" + str);
服务端的代码就是从QueryString读取那些参数值,然后输出。由于代码实在太简单,就不贴出了。(可下载示例代码)
当我点击链接时,服务端返回了这样的结果:
注意:"fish li + is me." 中间的加号没有了。
解决这个问题有个简单的方法,那就是使用JQuery的$.param()方法,修改后的代码如下:
&script type="text/javascript"&
var myobject = { aa: 1, bb: "fish li + is me.", cc: "大明王朝1368" };
$("#link1").attr("href", "/test_url_decode.ashx?method=param&" + $.param(myobject));
另外,我非常反感拼接这种提交数据:“key1=” + escape(value1) +“&key2=” + escape(value2)
因为这种代码的可读性太差了,在此,我建议在AJAX调用时,最好直接使用JQuery的$.ajax方法向服务端提交数据。
请看下面的示例代码(注意我为data属性赋值的方式):
&p&&a id="btnTestParam" href="javascript:void(0);"&Click me!
【点击我】&/a&&/p&
&div id="divResult"&&/div&
&script type="text/javascript"&
$(function() {
$("#btnTestParam").click(function() {
url: "/TestParam.ashx", type: "GET", cache: false,
data: { id: 2,
name: "fish li + is me.",
tel: "~!@#$%^&*()_+-=&&?|",
"x?x!x&x": "aa=2&bb=3&cc=汉字。",
// 特殊的键名,值内容也特殊。
encoding: "见鬼去吧。?& :)",
中文键名: "大明王朝1368"
success: function(responseText) {
$("#divResult").html(responseText);
运行结果:
JavaScript中正确的URL编码方式
看过前面的示例,您有没有想过:为什么escape不能解决的问题,JQuery就能解决呢?
对于这个问题,我想还是先来看看MSDN中关于escape的说明(截图):
MSDN说的很清楚,我也没有必要再做解释。
不过,我想有人可能会问:我用POST提交数据呢?那可是不经过URL的。
是的,POST数据时,参数没有放在URL中,但是,仍然采用URL编码。
POST数据也采用URL编码,是因为:表单可以采用GET方式提交,那么数据将通过URL提交给服务器。
所以提交的数据都要经过URL编码。
我们再来看一下$.ajax是如何处理数据的提交过程的:
ajax: function( origSettings ) {
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings);
// ............... 去掉一些无关的代码
// convert data if not already a string
if (s.data && s.processData && typeof s.data !== "string") {
// 注意下面这个调用
s.data = jQuery.param( s.data, s.traditional );
再来看jQuery.param的实现过程:
// Serialize an array of form elements or a set of
// key/values into a query string
param: function( a, traditional ) {
var s = [];
// ............... 去掉一些无关的代码
// If an array was passed in, assume that it is an array of form elements.
if ( jQuery.isArray(a) || a.jquery ) {
// Serialize the form elements
jQuery.each( a, function() {
add( this.name, this.value );
// ............... 去掉一些非重点代码
// Return the resulting serialization
return s.join("&").replace(r20, "+");
function add( key, value ) {
// If value is a function, invoke it and return its value
value = jQuery.isFunction(value) ? value() :
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
这段代码的核心就是add函数的实现了,它在内部调用了encodeURIComponent()函数。
我们应该注意JQuery对数据的处理方式:encodeURIComponent(key) + "=" + encodeURIComponent(value);
JQuery在最后还把%20还替换成 + 号了。
在WEB开发领域,我想大家对JQuery的权威应该不用怀疑吧? 所以我认为JQuery的方法肯定是正确的。
从JQuery的实现方式也可以看出:encodeURI()其实也是不推荐在编码URL数据时使用的。
说到这里,我要说说为什么不推荐使用encodeURI。
encodeURI用于对整个URL字符串进行编码,如果某个参数值本身包含一些特殊字符。
例如:key = "x?x/x&x", value = "aa=2&bb=3&cc=汉字。",这个函数的结果将会不正确。
它通常用于编码URL路径中包含有类似汉字这种场合,不适合处理URL参数。
但是,URL路径中的目录名与文件名,我们可以选择英文字符,所以encodeURI通常没有机会使用。
ASP.NET中正确的URL编码方式
前面介绍了JavaScript中三种URL的编码方式,在服务端,ASP.NET有更多的URL编码方法,
今天我也把服务端的编码也做了个总结,因为我发现网上有些资料也是错误的。
在ASP.NET中提供三个URL编码方法:HttpUtility.UrlPathEncode、HttpUtility.UrlEncode、Server.UrlEncode
.NET framework还提供了System.Uri这个类,它也有一些用于URL处理的方法。
比如EscapeUriString,EscapeDataString这二个方法,可用于URL路径与参数的编码任务。
面对这些方法,我该选择哪个?
我建议在 ASP.NET 中,编码查询参数 时选择HttpUtility.UrlEncode(str) ,
并且在拼接URL时,采用 HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(value) 的方法。
如果要 编码URL中的路径,请使用HttpUtility.UrlPathEncode()
下面我来解释前面不建议使用的另外的一些方法的原因:
1. Server.UrlEncode: 这个方法其实也是调用HttpUtility.UrlEncode,只是它会尽量使用Response.ContentEncoding所表示的编码格式,
然而HttpUtility.UrlEncode(str)总是会使用UTF-8编码,如果你不希望被字符编码纠缠,那就应该放弃Server.UrlEncode ,
毕竟UTF-8编码才是更好的选择。
2. 虽然System.Uri的那二个编码方法,也能实现我们需要的URL编码任务,
但是,当ASP.NET在填充Request.QueryString, Request.Form时,使用的解码方法是HttpUtility.UrlDecode,
因此,如果你执意选择使用System.Uri的相关的编码方法,显然就不能与解码方法匹配,后果如何就难说了。
正确的URL编码方式的总结
由于编码函数(方法)较多,而且又比较重要,我认为有必要再做个总结。
一个完整的URL可以简单地认为包含二个部分:文件路径(含目录) 和 查询参数(QueryString)
在编码时,一定要分开处理。
编码文件路径时,应该选择 encodeURI,HttpUtility.UrlPathEncode 。
编码查询参数时,应该选择 encodeURIComponent,HttpUtility.UrlEncode,而且拼接方式应该是:Encode(key) + "=" + Encode(value)
绝对不能先把整个URL(包含查询参数)拼接起来了,再来考虑该选择哪个编码方法。
再说一遍:在JavaScript中使用escape肯定是错误的。
彻底解决encodeURIComponent()与GB2312乱码问题
前面我建议在JavaScript中使用encodeURIComponent()来处理提交数据,
然而encodeURIComponent()在编码字符时,使用的是UTF-8编码。
也正因为这个原因,有人可能会说:我的网站使用的编码方式是gb2312 !
&globalization requestEncoding="gb2312" responseEncoding="gb2312" /&
对于这个回答,我有时实在不想再说下去了:你就不能把网站的编码改成UTF-8吗?
现在好了,我设计了一种方法,可以解决在GB1212编码的网站中使用encodeURIComponent(),
这个方法的设计思路比较直接:既然encodeURIComponent()是使用UTF-8编码,
那么,我们是不是只要告诉服务端,客户端提交的数据是UTF-8编码的,此时服务端只要识别后,按照UTF-8编码来解码,问题就解决了。
理清了思路,代码其实很简单。首先来看客户端的代码。
// 注意下面这行代码,它为请求添加一个自定义请求头
beforeSend: function(xhr) {
xhr.setRequestHeader("x-charset", "utf-8"); },
url: "/TestParam.ashx", type: "GET", cache: false,
data: { id: 2,
name: "fish li + is me.",
tel: "~!@#$%^&*()_+-=&&?|",
"x?x!x&x": "aa=2&bb=3&cc=汉字。",
// 特殊的键名,值内容也特殊。
encoding: "见鬼去吧。?& :)",
中文键名: "大明王朝1368"
success: function(responseText) {
$("#divResult").html(responseText);
注意:在原来的基础上,我只加了一行代码:
beforeSend: function(xhr) {
xhr.setRequestHeader("x-charset", "utf-8"); },
再来看服务端代码。我写了一个HttpModule来统一处理这个问题。
public class ContentEncodingModule : IHttpModule
public void Init(HttpApplication app)
app.BeginRequest += new EventHandler(app_BeginRequest);
void app_BeginRequest(object sender, EventArgs e)
HttpApplication app = (HttpApplication)
HttpWorkerRequest request = (((IServiceProvider)app.Context)
.GetService(typeof(HttpWorkerRequest)) as HttpWorkerRequest);
// 注意:我并没有使用 app.Request.Headers["x-charset"]
// 因为:绝大部分程序不访问它,它将一直保持是 null,
// 如果我此时该问这个集合,会导致填充它。
// 我认为填充Headers集合比我下面的调用的成本要高很多,
// 所以,直接通过HttpWorkerRequest读取请求头对性能的损耗会最小。
string charset = request.GetUnknownRequestHeader("x-charset");
if( string.Compare(charset, "utf-8",
StringComparison.OrdinalIgnoreCase) == 0 )
// ASP.NET在填充QueryString,Form时,会访问Request.ContentEncoding做为解码时使用的字符编码
app.Request.ContentEncoding = System.Text.Encoding.UTF8;
改造后的结果是:除非客户端明确添加"x-charset"请求头,否则还是按原来的方式处理,对于服务端代码来说,完全不用修改。
1. 如果网站的提交全部采用JQuery,也可以统一设置,这是JQuery支持的功能。
2. 如果使用JQuery1.5以上版本,也可以写成:headers: {"x-charset" : "utf-8"}
3. 就算以后网站使用UTF-8编码,所有代码不需要做任何修改。
Cookie乱码问题
前段时间,有人在的评论中问我:asp.net服务器端写中文cookie,js客户端读取时乱码。
其实这个问题还是比较好解决的,方法是:写Cookie时用HttpUtility.UrlEncode编码,然后在客户端使用decodeURIComponent把内容转回来就可以了。
在此,我推荐使用jquery.cookie.js这个插件来读写Cookie。 示例代码如下(前端):
$(function() {
var cookie = $.cookie("TestJsRead");
$("#cookieValue").text(cookie);
服务端代码:
cookie = new HttpCookie("TestJsRead", HttpUtility.UrlEncode("大明王朝1368"));
Response.Cookies.Add(cookie);
下载文件名乱码问题
有时我们需要在程序运行时动态的创建文件,并让用户下载这个在运行时产生的文件,
然而,有时候用户会要求程序能生成一个默认的文件名,方便他们保存。
此时,我们只需要设置Content-Disposition这个响应头,并给一个默认的文件名就可以了。
一般说来,我们只要让默认的下载文件名是英文及数字,问题永远不会出现,
但是,有时候用户可能要求默认的文件中包含汉字,
最终,问题也随之发生了。
请看下面的代码:
public void ProcessRequest(HttpContext context)
byte[] fileContent = GetFileContent();
context.Response.ContentType = "application/octet-stream";
string downloadName = "ClownFish性能测试结果.xlsx";
string headerValue = string.Format(" filename=\"{0}\"", downloadName);
context.Response.AddHeader("Content-Disposition", headerValue);
context.Response.OutputStream.Write(fileContent, 0, fileContent.Length);
这段代码在我的FireFox, Opera, Safari, Chrome都能正常运行,其中FireFox显示的下载对话框也是我期待的样子:
遗憾的是,在我的IE8中是这样的:
对于这个乱码问题,我们需要把代码做一点修改:
string downloadName = "ClownFish性能测试结果.xlsx";
if( context.Request.Browser.Browser == "IE" )
downloadName = HttpUtility.UrlPathEncode(downloadName);
此时IE显示的文件名就不是乱码了。
说明:我的机器环境是 Windows Server 2003 SP2,
用于测试的浏览器版本分别为:
多语言数据的乱码问题
现在还有一种乱码问题是:同一个程序供多种不同字符集(语言)的用户在使用。
例如:程序是简体中文的,此时,繁体中文的用户无法保存繁体汉字(就算简体汉字能正常显示)。
当发现这种现象时,需要检查一下数据库的字段类型,是否是Unicode或者UTF-8,
因为当数据字段的字符集不支持多种语言时,乱码问题必定产生。
我建议在使用SQL SERVER时,保存文字的字段都使用N开头的类型,
如:nvarchar, nchar,除非明确知道要保存邮政编码或者md5值,才有必要使用char(xxx)这种数据类型。
类似的,在MySQL中,我建议使用UTF-8
乱码问题的总结
ASP.NET的乱码问题一般与二个因素有关:
1. 选择了不恰当的字符编码,如:gb2312
2. 选择了不正确的URL编码方法,如:escape()
因此,解决方案其实也不难:
1. 字符编码选择 utf-8 ,包含文件编码,请求/响应编码,数据库字段类型。
2. URL编码方法选择encodeURIComponent,再次强烈推荐直接使用JQuery
我一直认为:正确的方法可以让我在无形中避开许多问题。
如果你还为乱码问题而烦恼,我建议你先想想你是否选择了不正确的编码(方法)。
阅读(...) 评论()

我要回帖

更多关于 有哪些数据库 的文章

 

随机推荐