AutoPostBackは現象を通して本質を見る
9432 ワード
人事ファイル管理システムでは、フロントデータ(リアルタイム)とバックグラウンドのインタラクションを実現する機能が必要です.この問題を解決するには、まずアプリケーションコントロールのAutoPostBackプロパティが考えられます.この問題はこのように解決されたと思っていたが(javascript、jquery、ajaxは使わない)、実現の過程ではそんなに簡単ではないことが分かった.
AutoPostBackとは
AutoPostBackはaspです.Netの多くのサーバコントロールの1つのプロパティ(TextBox、Lable、RadioButton、CheckBox、GridViewなど).AutoPostBackプロパティの値がtrueに設定されている場合、コントロールの値またはステータスが変更されると、クライアントのブラウザはこの変更要求をサーバに返します.もちろん、サーバもこの変更に応答します.したがって、コントロールのこの属性に依存してクライアントは、フォームを記入するときに入力された情報が規範化されているかどうかをリアルタイムで検証するなど、サーバとリアルタイムで対話することができますが、サーバの負担が重くなります.1つのサイトに個人情報を登録する必要があると仮定し、1人1つを記入するにはサーバの検証と応答が必要であり、サーバの負担が大きくなるため、フォーム検証のようなことは通常クライアントに任せて処理し、サーバの負担を軽減します.
AutoPostBack+javascript
今回の問題は主にGridViewの各行にラジオボタンとデータがあり、選択した行に基づいて後で対応するデータを取得する必要があります.この問題を解決するには、gridviewのコントロールとデータがバックグラウンドデータに基づいて生成される、すなわちデータとコントロールが動的であることに注意しなければならない.ラジオボタンでラジオを実現するには、ラジオボタンのGroupName属性を同じグループに設定する必要があります.ラジオのGroupName="xuanzze"コードを設定して実行すると、Webソースコードを表示するとgridviewのname="ctl 00_ContentPlaceHolder 1_gridView"、RadioButtonのname="ctl 00$ContentPlaceHolder 1$gridView 02$xuanze"となります.このときのラジオボタンはgridviewで動的に生成され、設定されたGroupName属性はコード実行時に機能しません.解決策はjavascriptを利用して選択時にすべてのRadioButtonを遍歴し、RadioButtonのname属性を同じ値に設定することです.ラジオの問題は解決したが、それに伴ってRadioButtonのAutoPostBackプロパティ設定が無効になった.すなわち、バックグラウンドがRadioButtonのOnCheckedChangedに対応する方法は実行されていない.
使用例テスト1:AutoPostBack
フォームにRadioButtonサーバーコントロール、TextBoxコントロールを追加し、RadioButtonのAutoPostBackプロパティをtrueに設定し、RadioButtonのOnCheckedChangedプロパティに対応するメソッドがテキストボックスの内容を出力するようにします.コード実行、ブレークポイントデバッグラジオボタンをクリックするとバックグラウンドメソッドがPage_Loadメソッドの実行開始は、ページの再ロードに相当します.
使用例テスト2:AutopostBack+Javascript
使用例1に基づいてRadioButtonにOnclickイベントを追加:onclick="return alert("警告!")では、AutoPostBackプロパティ設定が無効になっていることがわかります.RadioButtonのOnClickイベントを削除し、実行コードの結果AutopostBack属性は正常で、バックグラウンドコードも実行します.この結果から,RadioButtonのOnclickイベントがAutoPostBack属性の設定に役立ったと推測される.使用例テスト3 JSシミュレーションAutoPostBack使用例のテスト結果から、RadioButtonのOnClickのJavascript関数がAutoPostBack属性に影響していると推測します.AutoPostBackによるバックグラウンド・データとのリアルタイムの対話はどのように実現されますか?初歩的な推測はjsと関係がある.
使用例テスト3:AutoPostBack+javascript(フォームの発行)
用例3ではRadioButtonのOnClickイベントを用いてフォームをコミットし,JSが実行されていることを発見し,AutoPostBack属性の効果も実現した.インターネットで多くの資料を調べたが、AutopostBackの基本的な機能を紹介していることが多く、上記のようにAutoPostBackの実現メカニズムに関する資料は見つからなかった.
まとめと発見
Javascriptコミットフォームを使用してAutopostBackが実現する効果を実現しましたが、AutopostBackの実現メカニズムを特定することはできません.最後にmsdnを検索する過程で海外の人もこの質問をしていることを発見しました:what is autopostback?
この質問に対する回答は,大部分の回答がAutopostBack属性の機能を簡潔に紹介しており,AutopostBackの実現メカニズムを説明していない.しかし、ページを見た最後に興奮した情報が見えました.
Re: what is autopostback? Mar 02, 2011 09:07 AM|LINK Postback occurs when you submit a form using button or javascript. By default Dropdowns, checkboxes, radiobuttons don't have server side event. ASP.Net makes use of javascript to give server side events to these conrols. Hence if you want these controls to do postback you need to set Autopostback = true. Once done whenever you do any change to these controls a javascript method called as __doPostback is called which submits the form thus causing postback.
提出ボタンやjavascriptでフォームを提出するとPostBackが発生します.Dropdowns、CheckBox、RadioButtoこれらのコントロールはサーバー側では対応するイベントがありません.Asp.Netではjavascriptを利用してこれらのコントロールにイベントを追加し、PostBackを実現します.したがって、PostBackが必要な場合はAutopostBackプロパティをtrueに設定する必要があります.いつでもコントロールが変更されると自動的に__という名前がトリガーされます.doPostbackのコミットフォームのjs関数.
AutoPostBackとは
AutoPostBackはaspです.Netの多くのサーバコントロールの1つのプロパティ(TextBox、Lable、RadioButton、CheckBox、GridViewなど).AutoPostBackプロパティの値がtrueに設定されている場合、コントロールの値またはステータスが変更されると、クライアントのブラウザはこの変更要求をサーバに返します.もちろん、サーバもこの変更に応答します.したがって、コントロールのこの属性に依存してクライアントは、フォームを記入するときに入力された情報が規範化されているかどうかをリアルタイムで検証するなど、サーバとリアルタイムで対話することができますが、サーバの負担が重くなります.1つのサイトに個人情報を登録する必要があると仮定し、1人1つを記入するにはサーバの検証と応答が必要であり、サーバの負担が大きくなるため、フォーム検証のようなことは通常クライアントに任せて処理し、サーバの負担を軽減します.
AutoPostBack+javascript
今回の問題は主にGridViewの各行にラジオボタンとデータがあり、選択した行に基づいて後で対応するデータを取得する必要があります.この問題を解決するには、gridviewのコントロールとデータがバックグラウンドデータに基づいて生成される、すなわちデータとコントロールが動的であることに注意しなければならない.ラジオボタンでラジオを実現するには、ラジオボタンのGroupName属性を同じグループに設定する必要があります.ラジオのGroupName="xuanzze"コードを設定して実行すると、Webソースコードを表示するとgridviewのname="ctl 00_ContentPlaceHolder 1_gridView"、RadioButtonのname="ctl 00$ContentPlaceHolder 1$gridView 02$xuanze"となります.このときのラジオボタンはgridviewで動的に生成され、設定されたGroupName属性はコード実行時に機能しません.解決策はjavascriptを利用して選択時にすべてのRadioButtonを遍歴し、RadioButtonのname属性を同じ値に設定することです.ラジオの問題は解決したが、それに伴ってRadioButtonのAutoPostBackプロパティ設定が無効になった.すなわち、バックグラウンドがRadioButtonのOnCheckedChangedに対応する方法は実行されていない.
使用例テスト1:AutoPostBack
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="radionTest.aspx.cs" Inherits="Testcookie.radionTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title> </title>
</head>
<body>
<form id="form1" runat="server" >
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:radiobutton ID="Radiobutton1" runat="server" AutoPostBack="true" OnCheckedChanged="Radio_OnCheckedChanged" ></asp:radiobutton>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Testcookie
{
public partial class radionTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Radio_OnCheckedChanged(object sender, EventArgs e)
{
String word = TextBox1.Text;
if(RadioButton1.Checked==true)
{
Response.Write(word);//
}
}
}
}
フォームにRadioButtonサーバーコントロール、TextBoxコントロールを追加し、RadioButtonのAutoPostBackプロパティをtrueに設定し、RadioButtonのOnCheckedChangedプロパティに対応するメソッドがテキストボックスの内容を出力するようにします.コード実行、ブレークポイントデバッグラジオボタンをクリックするとバックグラウンドメソッドがPage_Loadメソッドの実行開始は、ページの再ロードに相当します.
使用例テスト2:AutopostBack+Javascript
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="radionTest.aspx.cs" Inherits="Testcookie.radionTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title> </title>
</head>
<body>
<form id="form1" runat="server" >
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:radiobutton ID="Radiobutton1" runat="server" AutoPostBack="true" OnCheckedChanged="Radio_OnCheckedChanged" onclick="return alert(" !")" ></asp:radiobutton>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Testcookie
{
public partial class radionTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Radio_OnCheckedChanged(object sender, EventArgs e)
{
String word = TextBox1.Text;
if(RadioButton1.Checked==true)
{
Response.Write(word);//
}
}
}
}
使用例1に基づいてRadioButtonにOnclickイベントを追加:onclick="return alert("警告!")では、AutoPostBackプロパティ設定が無効になっていることがわかります.RadioButtonのOnClickイベントを削除し、実行コードの結果AutopostBack属性は正常で、バックグラウンドコードも実行します.この結果から,RadioButtonのOnclickイベントがAutoPostBack属性の設定に役立ったと推測される.使用例テスト3 JSシミュレーションAutoPostBack使用例のテスト結果から、RadioButtonのOnClickのJavascript関数がAutoPostBack属性に影響していると推測します.AutoPostBackによるバックグラウンド・データとのリアルタイムの対話はどのように実現されますか?初歩的な推測はjsと関係がある.
使用例テスト3:AutoPostBack+javascript(フォームの発行)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="radionTest.aspx.cs" Inherits="Testcookie.radionTest" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title> </title>
<script language="javascript" type="text/javascript">
function ty() {
document.getElementById("form1").submit();//
}
</script>
</head>
<body>
<form id="form1" runat="server" >
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:radiobutton ID="Radiobutton1" runat="server" AutoPostBack="true" OnCheckedChanged="Radio_OnCheckedChanged" onclick="return ty()" ></asp:radiobutton>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Testcookie
{
public partial class radionTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Radio_OnCheckedChanged(object sender, EventArgs e)
{
String word = TextBox1.Text;
if(CheckBox1.Checked==true)
{
Response.Write(word);//
}
}
}
}
用例3ではRadioButtonのOnClickイベントを用いてフォームをコミットし,JSが実行されていることを発見し,AutoPostBack属性の効果も実現した.インターネットで多くの資料を調べたが、AutopostBackの基本的な機能を紹介していることが多く、上記のようにAutoPostBackの実現メカニズムに関する資料は見つからなかった.
まとめと発見
Javascriptコミットフォームを使用してAutopostBackが実現する効果を実現しましたが、AutopostBackの実現メカニズムを特定することはできません.最後にmsdnを検索する過程で海外の人もこの質問をしていることを発見しました:what is autopostback?
この質問に対する回答は,大部分の回答がAutopostBack属性の機能を簡潔に紹介しており,AutopostBackの実現メカニズムを説明していない.しかし、ページを見た最後に興奮した情報が見えました.
Re: what is autopostback? Mar 02, 2011 09:07 AM|LINK Postback occurs when you submit a form using button or javascript. By default Dropdowns, checkboxes, radiobuttons don't have server side event. ASP.Net makes use of javascript to give server side events to these conrols. Hence if you want these controls to do postback you need to set Autopostback = true. Once done whenever you do any change to these controls a javascript method called as __doPostback is called which submits the form thus causing postback.
提出ボタンやjavascriptでフォームを提出するとPostBackが発生します.Dropdowns、CheckBox、RadioButtoこれらのコントロールはサーバー側では対応するイベントがありません.Asp.Netではjavascriptを利用してこれらのコントロールにイベントを追加し、PostBackを実現します.したがって、PostBackが必要な場合はAutopostBackプロパティをtrueに設定する必要があります.いつでもコントロールが変更されると自動的に__という名前がトリガーされます.doPostbackのコミットフォームのjs関数.