paip.PHP-asp—jsp實現事件機制 WEBFORM式開發
前言... 1
CODE Behind代碼分離... 1
頁面控件... 1
實現一個窗體... 2
實現狀態VIEWSTATE保存... 2
Page_Ini事件與Page_Load事件... 3
實現button1_click事件... 4
實現button2_click事件... 4
附注: webform.CodeFile.php源碼... 5
前言
我們都知道asp.net是以WEBFORM式開發的,易於理解,基於事件機制..開發效率比起MVC方式要大大的快..
PHP,ASP,JSP也是可以以WEBFORM開發的.,這裡我們以PHP為例子說明如何進行WEBFORM式開發..
CODE Behind代碼分離
如需要實現代碼分離,除了MVC以外,還可以使用Code-Behind技術來實現,更加簡單,開發效率比MVC要快得多..並且容易實現模塊化,組件化
在我裡我們實現兩個頁面,一個放界面HTML代碼,,起名為webform.php,一個放代碼,命名為webform.CodeFile.php
要實現CODE Behind,在webform.php 第一行加入以下代碼:
<?php require('webform.CodeFile.php'); ?>
頁面控件
在ASP。NET中,我們是用RUNAT=“SERVER”,來表明一個HTML控件可以在服務端引用..在PHP中,需要使用變通的方式來實現
LABEL控件:
<span> <?phpecho( $Label1_Text);?> </span>
<input type="hidden" name="Label1" value="<?phpecho($Label1_Text);?>" />
Textbox控件:
<input type="text" name="TextBox1" value="<?phpecho($TextBox1_Text);?>"/>
實現一個窗體
在這裡我們需要一個LABLE,一個TEXTBOX控件,兩個按鈕控件..
我們的要求是當點擊第1個按鈕時,將LABLE與TEXTBOX值都設為button1 click…
當點擊第二個按鈕時,將LABLE值設為 TEXTBOX中的輸入值
總代碼如下
<?php require('webform.CodeFile.php'); ?>
<form id="form1" name="form1" method="post" action="">
<p>
<span> <?phpecho( $Label1_Text);?> </span>
<input type="hidden" name="Label1" value="<?phpecho($Label1_Text);?>" />
</p>
<p>input:
<input type="text" name="TextBox1" value="<?phpecho($TextBox1_Text);?>"/>
</p>
<p>
<input type="submit" name="Button1" value="提交" />
<input type="submit" name="Button2" value="提交2" />
</p>
</form>
實現狀態VIEWSTATE保存
在CODE Behind文件中,webform.CodeFile.php.. 我們寫代碼來實現前台界面控件狀態保存。。當界面提交後返回時控件值都在..
<?php
//保持控件狀態,viewstate管理
viewstate();
//__VIEWSTATE
function viewstate()
{
foreach ($_REQUEST as $color){
$key=key($_REQUEST);
$controlName=$key."_Text";
// echo ($key."---".$color."<br>");
global $$controlName;
$$controlName =$color;
next($_REQUEST);
}
}
Page_Ini事件與Page_Load事件
當我們第一次訪問此窗體時,觸發Page_Ini事件,..每次訪問此頁面時,則總會觸發Page_Load事件..
//頁面事件注冊
eventReg4Page();
function Page_Ini()
{
echo "page ini event ";
global $Label1_Text;
$Label1_Text=" Page_Ini click";
global $TextBox1_Text;
$TextBox1_Text=" Page_Ini click";
}
function Page_Load()
{
echo "page load event ";
}
實現button1_click事件
//控件事件注冊
eventReg("Button1",Button1_Click);
//按鈕控件Button1的點擊事件
function Button1_Click()
{
global $TextBox1_Text;
$TextBox1_Text=" button1 click";
global $Label1_Text;
$Label1_Text=" button1 click";
}
//事件注冊
function eventReg($controlName,$controlEvent)
{
if($_POST[$controlName])
$controlEvent();
}
實現button2_click事件
//按鈕控件Button2的點擊事件
function Button2_Click()
{
global $TextBox1_Text;
// $TextBox1_Text=" button2 click";
global $Label1_Text;
$Label1_Text=$TextBox1_Text;
}
附注: webform.CodeFile.php源碼
<?php
//保持控件狀態,viewstate管理
viewstate();
//控件事件注冊
eventReg("Button1",Button1_Click);
eventReg("Button2",Button2_Click);
//頁面事件注冊
eventReg4Page();
function Page_Ini()
{
echo "page ini event ";
global $Label1_Text;
$Label1_Text=" Page_Ini click";
global $TextBox1_Text;
$TextBox1_Text=" Page_Ini click";
}
function Page_Load()
{
echo "page load event ";
}
//按鈕控件Button1的點擊事件
function Button1_Click()
{
global $TextBox1_Text;
$TextBox1_Text=" button1 click";
global $Label1_Text;
$Label1_Text=" button1 click";
}
//按鈕控件Button2的點擊事件
function Button2_Click()
{
global $TextBox1_Text;
// $TextBox1_Text=" button2 click";
global $Label1_Text;
$Label1_Text=$TextBox1_Text;
}
//-----------------以下函數可以做為公共函數,包含進來-------------------
//事件注冊
function eventReg($controlName,$controlEvent)
{
if($_POST[$controlName])
$controlEvent();
}
//頁面事件注冊
function eventReg4Page()
{
if(!$_POST)
{
if(function_exists("Page_Ini"))
call_user_func("Page_Ini");
}
//注冊Page_Load事件
if(function_exists("Page_load"))
call_user_func("Page_load");
}
//__VIEWSTATE
function viewstate()
{
foreach ($_REQUEST as $color){
$key=key($_REQUEST);
$controlName=$key."_Text";
// echo ($key."---".$color."<br>");
global $$controlName;
$$controlName =$color;
next($_REQUEST);
}
}
?>