多想兩分鐘,你可以不用 validateRequest="false"(WebForm版)
0 |
接續前一篇不關閉validateRequest下允許傳送XML內容的議題,有人問起,我才想到該文只示範了AJAX做法,壓根忘了提WebForm環境下應如何處理。
以下是我會採用的處理方式。原理上還是透過encodeURIComponent()及HttpUtility.UrlDecode()分別在Client端與Server端加解碼,只是要額外動些手腳:
- 在網頁上放一個<asp:HiddenField>作為實際的傳值容器。
- 供使用者輸入的<textarea>或<input type="text">定義成純Client端元素,並記得只指定id,不要指定name屬性,不然它會一併被Postback引發檢核錯誤,徒增麻煩。
- 在表單的Client onsubmit事件中,取出textarea內容,經encodeURIComponent()後存入<asp:HiddenField>中,接著就可以放心送出表單囉!
- 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>變成編碼後內容的燙手山芋,個人認為並不划算,建議別自找麻煩。
Comments
Be the first to post a comment