Wednesday, June 17, 2009

Page.Ispostback

ที่มา http://www.twoguru.com/playground/asp.net/start/IsPostBack.htm

ในบทนี้อยากจะแนะนำ property Ispostback ของ Page object ทบทวนกันอีกครั้ง สำหรับ Page Object ใน ASP.NET นั้น เมื่อไฟล์ .aspx ถูกขอจาก browser นั้น ไฟล์นี้จะถูก compiled เป็น Page class แต่ละ .aspx นั้นก็ถือว่าเป็น หนึ่ง Page Class

Page.Ispostback นี้มันจะช่วยให้เราทำงานกับฟอร์มได้ง่ายขึ้นอย่างไร หลักการง่ายๆในการใช้ Ispostback ก็คือ ถ้าเรามีแบบฟอร์มอยู่ แล้วในไฟล์ก็มี ASP.NET code ด้วย ในการเรียกไฟล์นั้น เราอยากจะให้ code บางส่วนถูก execute เวลาผู้ใช้ submit ฟอร์ม และ อยากให้ code บางส่วนถูก execute เวลาไฟล์ถูกเรียก แต่ไม่มีการ submit ฟอร์ม ในกรณีเช่นนี้ เราสามารถใช้ Ispostback เป็น condition ของ IF block เพื่อเลือก execute code

Page.Ispostback นี้เป็น Boolean property (true/false) ซึ่งค่า default ของมันจะเป็น false แต่ถ้ามีการ submit ฟอร์มแล้ว ค่าของ Page.Ispostback จะถูกเปลี่ยนเป็น true อย่าลืมว่า คุณสมบัติของ HTTP นั้นเป็น stateless protocol เพราะฉะนั้นเมื่อ .aspx ถูกเรียกขอ มันก็จะถูก compiled หรือเรียก compiled code จาก cache และ executed แล้วผลลัพธ์ที่ได้จะถูกส่งไปให้ browser จากนั้น connection นั้นก็จะถูกตัดไป ค่าทุกอย่างของ Page object ก็จะถูก reset

เรามาดูตัวอย่างกัน

postback.aspx

<%@ Page Language="vb"%> <%@ Page Language="vb"%> <%@ Page Language="vb"%> <%@ Page Language="vb"%>
<%@ Page Language="C#"%>

<HTML>
<
HEAD>
<
title>Formtitle>
HEAD>

<
script runat="server">
void Page_Load(
Sender as object, E as EventArgs){
if (!Page.IsPostBack) {
lblName.Text = "Parichat";
} else {
lblName.Text = txtName.Text;
}
}
script>

<
body>
<
form id="frmMyFirstForm" method="post" action="myForm.aspx" runat="server">
<
asp:TextBox id="txtName" style="LEFT: 215px; POSITION: absolute; TOP:100px" runat="server" Width="279px" Height="27px">asp:TextBox>
<
asp:Label id="lblName" style="LEFT: 215px; POSITION: absolute; TOP: 140px" runat="server" Width="270px" Height="27px">test</asp:Label>
<
asp:Button id="btnOK" style="LEFT: 215px; POSITION: absolute; TOP: 170px" runat="server" Width="270px" Height="27px" Text="OK">asp:Button>
form>
body>
HTML>

และขั้นตอนต่อไป ให้นำไฟล์นี้ไปเก็บไว้ที่ web server ซึ่งก็คือ drive:\inetpub\wwwroot เมื่อเสร็จแล้ว สามารถทดลองรันดูได้ ที่ browser โดยการเรียกไฟล์ http://servername/postback.aspx อย่าลืมว่าการเรียกไฟล์ .asp หรือ .aspx จะต้องเรียกผ่าน HTTP เท่านั้น คุณไม่สามารถใช้ File/Open จาก browser ได้

รายละเอียด

<%@ Page Language="vb"%> <%@ Page Language="vb"%> <%@ Page Language="vb"%> <%@ Page Language="vb"%> <script runat="server">
void Page_Load(
Sender as object, E as EventArgs){
if (!Page.IsPostBack) {
lblName.Text = "Parichat";
} else {
lblName.Text = txtName.Text;
}
}
script>

ในโค้ดนี้สิ่งที่เพิ่มมาจากเดิมก็คือส่วนที่เป็น script แทนที่เราจะสร้าง procedure เอง เราจะเขียนโค้ดไว้เพื่อดัก event ของ Page Object ก็คือ Load event หลังจากนั้นเราก็ทำการตรวจสอบว่า ผู้ใช้ได้กดปุ่ม submit Form หรือเปล่า ถ้าไม่ได้กด Page.IsPostBack property ก็เป็น False เราก็ให้ lblName.Text มีค่า เป็น "Parichat"

อีกส่วนหนึ่งที่ต่างไปก็คือ

<%@ Page Language="vb"%> <%@ Page Language="vb"%> <%@ Page Language="vb"%> <%@ Page Language="vb"%> <asp:Button id="btnOK" style="LEFT: 215px; POSITION: absolute; TOP: 170px" runat="server" Width="270px" Height="27px" Text="OK">asp:Button>

เราไม่ได้เรียก event OnClick ของ btnOK object

สรุป
  • ถ้าเป็นการเปิดหน้านี้ ครั้งแรก ispostback จะเป็น false
  • ถ้าเป็นการ refresh หน้า ispostback จะเป็น true

No comments:

Post a Comment

Popular Posts