日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

怎樣解決asp.net URL傳值出現(xiàn)錯(cuò)誤的問題(2)_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:解讀asp.net常用正則表達(dá)式
一、字段 表達(dá)式 格式示例 說明 數(shù)字^\D?(\d{3})\D?\D?(\d{3})\D?(\d{4})$(425)-555-0123425-555-01234255550123驗(yàn)證美國(guó)電話號(hào)碼。 名稱[a-zA-Z’`-\s]{1,40}JohnDoeO’Dell驗(yàn)證名稱。最多允許使用40個(gè)大寫字母和小寫字母,以及一些在名稱中常用的特殊字符


  但是這樣的傳遞中文可能還會(huì)遇到其他中文字出問題,最好是采用下面的方法將中文參數(shù)編碼。
   3. 我采用URLEncode()編碼,采用URLEncode()不在Web.config中設(shè)置好像也可以,在我的測(cè)試中沒有問題,但是為了安全,我們還是添加上上面的設(shè)置。
  3.1. 
  頁(yè)面上都是一致的,第一頁(yè)面的后臺(tái)代碼:
public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    string url;
    string name;
    url = "Default2.aspx?Name=";
    name = "DK51+700中繼站";
name = name.Replace("+", "@");
    HyperLink1.NavigateUrl = url + Server.UrlEncode(name);
  }
}

  3.2. 
  第二個(gè)頁(yè)面中,后臺(tái)代碼:
public partial class Default2 : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
{
  string name = Request.QueryString["Name"];
    name = name.Replace("@", "+");
    name = name.Replace("%", "站");
    Label1.Text = name;
  }
}

  3.3.結(jié)果是:“DK51+700中繼站”。正確!
  后來(lái)我在網(wǎng)上找到這個(gè)這樣的設(shè)置,在Web.config中設(shè)置:
<system.web>
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
</system.web>

  但是這樣的傳遞中文可能還會(huì)遇到其他中文字出問題,最好是采用下面的方法將中文參數(shù)編碼。
   我采用
  4.1.頁(yè)面上都是一致的,第一頁(yè)面的后臺(tái)代碼:
public partial class _Default : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    string url;
    string name;
    url = "Default2.aspx?Name=";
    name = "DK51+700中繼站";
    name = name.Replace("+", "@");
    HyperLink1.NavigateUrl = url + Server.UrlEncode(name);
  }
}

  4.2 第二頁(yè)面的后臺(tái)代碼:
public partial class Default2 : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
    string name = Request.QueryString["Name"];
name = Server.UrlDecode(name);
name = name.Replace("@", "+");
    Label1.Text = name; 
  }
}

  4.3  結(jié)果是:“DK51+700中繼站”。正確!
  注意:一定要前后對(duì)應(yīng),比如在這里,第一頁(yè)面中是先編碼的,后替代,第二頁(yè)面中就要先替代,再解碼,不然就會(huì)出錯(cuò),如:“DK51 700中繼站”
  我在開頭提到,遇到了比較多的問題:
  1.  網(wǎng)上的資料有的說是用“%20”來(lái)替代“+”,但是我嘗試了下,結(jié)果卻是錯(cuò)誤的: “DK51 700中繼站”,這是什么原因呢?是網(wǎng)上說錯(cuò)了嗎?但是在下面的情況中,又很讓我苦笑不得,不知道具體是什么原因。
  2.  接上面,還是用“%20”來(lái)替代“+”;我在一次錯(cuò)誤的輸入,在第一頁(yè)面后臺(tái)輸入了name = Server.UrlEncode(name);第二頁(yè)面中解碼是 name = Server.HtmlDecode(name);居然是結(jié)果對(duì)的,“DK51+700中繼站”。我換了其他的替代字符,結(jié)果也是正確的。
  但是我換了其他編碼和解碼組合:Server.HtmlEncode(name)和Server.UrlDecode(name),或者Server.HtmlEncode(name)和Server.HtmlDecode(name)組合,結(jié)果就不對(duì)。連中文都不對(duì):“DK51 700中繼口”。
  3. 我采用Server.HtmlEncode(name)和Server.HtmlDecode(name)組合,要得到正確的結(jié)果,必須用像“@“這樣的特殊字符來(lái)替代“+”,當(dāng)然還有在Web.config中添加設(shè)置,設(shè)置內(nèi)容如上。
  4. 我在查資料的時(shí)候還有提到一種方法;不需要在Web.config中添加設(shè)置,在aspx文件中添加:
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

  我嘗試了,沒成功。
  5. 我還有個(gè)疑問是,在這里,我是用“@”的特殊字符來(lái)代替“+”,因?yàn)樵谖业淖址惺遣豢赡艹霈F(xiàn)“@”,才這樣做的。但是如果我的字符串中可能出現(xiàn)這些特殊字符串,我又該如何替代呢?
  6. 我在經(jīng)歷了這些測(cè)試后,覺得最安全的方法,在URL中傳遞參數(shù)時(shí),最好還是使用URLDecode()方法。在Web.config中配置上
<system.web>
<globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" />
</system.web>

  配置這個(gè)是需要注意,你的程序中的字符集是不是也用這個(gè)“
  今天理解到了測(cè)試時(shí)需要很有耐心的,在這個(gè)問題中,正確的方法就是可能就是一兩種,但是為了測(cè)試錯(cuò)誤的情況,我做了七八種情況,比如URLEncode,URLDecode和HtmlEncode,HtmlDecode的組合問題,傳遞時(shí)和接收時(shí),編碼,替代,解碼,的先后順序。這些花了很多時(shí)間,篇幅太多,這里就寫這些。

分享:.net編程中常見錯(cuò)誤詳解
1:command調(diào)用存儲(chǔ)過程的時(shí)候,如果輸出是dataset,selectcommand的command對(duì)象的connection先要指出,否則catch一輩子也是空的.. 2:存儲(chǔ)過程的varchar字段如果是x.x的這種格式,容易出現(xiàn)細(xì)微的傻錯(cuò)誤,注意不要漏了[]. 3:如果ascx文件的默認(rèn)服務(wù)器控件的事件不重

共2頁(yè)上一頁(yè)12下一頁(yè)
來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2010-06-02
相關(guān).Net教程