多想兩分鐘,你可以不用 validateRequest="false"(WebForm版)

接續前一篇不關閉validateRequest下允許傳送XML內容的議題,有人問起,我才想到該文只示範了AJAX做法,壓根忘了提WebForm環境下應如何處理。

以下是我會採用的處理方式。原理上還是透過encodeURIComponent()及HttpUtility.UrlDecode()分別在Client端與Server端加解碼,只是要額外動些手腳:

  1. 在網頁上放一個<asp:HiddenField>作為實際的傳值容器。
  2. 供使用者輸入的<textarea>或<input type="text">定義成純Client端元素,並記得只指定id,不要指定name屬性,不然它會一併被Postback引發檢核錯誤,徒增麻煩。
  3. 在表單的Client onsubmit事件中,取出textarea內容,經encodeURIComponent()後存入<asp:HiddenField>中,接著就可以放心送出表單囉!
  4. Server端在IsPostBack時用HttpUtility.UrlDecode(theHiddenField.Value)就能輕鬆取值。

以下是程式範例:

<%@ Page Language="C#" %>
<!DOCTYPE>
 
<script runat="server">
    void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            Response.ContentType = "text/plain";
            Response.Write("Data=" + HttpUtility.UrlDecode(hdnXml.Value));
            Response.End();
        }
    }
</script>
 
<html>
<head runat="server">
    <title>MyLab</title>
    <style>
        body,input { font-size: 9pt; }
    </style>
    <script src='http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.js'></script>   
    <script>
        $(function () {
            $("#txtXml").text("<data>Text</data>");
            //掛上onsubmit事件,表單送出前,將textarea的內容編碼後寫入hidden
            $("#form1").submit(function () {
                $("#hdnXml").val(encodeURIComponent($("#txtXml").text()));
            });
        });
    </script>
 
</head>
<body>
    <form id="form1" runat="server">
    <!--用純Client端的textarea或input讓使用者輸入XML,
        記得只設id,不要設name,以免PostBack時被一併送回-->
    <textarea id="txtXml" cols="20" rows="4">
    </textarea><br />
    <asp:HiddenField ID="hdnXml" runat="server" EnableViewState="false"/>
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" />
    </form>
</body>
</html>

PS: 當然,你也可選擇不另增設HiddenField,直接在onsubmit時取出<textarea>內容,encodeURIComponent()後再寫回<textarea>。不過省下這點工,卻必須面對使用者回上頁時<textarea>變成編碼後內容的燙手山芋,個人認為並不划算,建議別自找麻煩。

歡迎推文分享:
Published 01 February 2012 10:14 PM 由 Jeffrey
Views: 7,150



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<February 2012>
SunMonTueWedThuFriSat
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication