WebForm_OnSubmit
標準の WebForms JavaScript 関数をオーバーライドまたは拡張するにはどうすればよいですか?
ASP.net WebForms Web サイトで HTML5 入力タイプを使用しています。ユーザー エージェント (Chrome、IE、Firefox など) は、データのサニタイズ、代替 UI などを既に正しく処理しています。
通常、ユーザーが<input type="submit">
ボタンをクリックすると、User-Agent は送信を停止し、入力が無効になることをユーザーに示す UI を表示します。
WebForms の問題は、送信ボタンを使用しないことです。代わりに、フォームを送信するのではなく、JavaScript ポストバックを介してすべてを実行できます。
<asp:LinkButton ID="bbOK" Text="Save User" runat="server" OnClick="bbOK_Click"></asp:LinkButton>
これは、クライアント html にレンダリングされると、Javascript への呼び出しになります。
WebForm_DoPostBackWithOptions(...)
非常に長い形式のアンカー タグを使用すると、次のようになります。
<a id="Really_Long_Thing_ctl00_bbOK"
href='javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("ctl00$MainContent$VistaToolbar$ctl00$bbOK", "", true, "", "", false, true))'>
Save User
</a>
これは、ユーザー エージェントが、入力された要素が無効であるというプロンプトをユーザーに表示しないことを意味します。
が「送信」さform
れていなくても、イベントはトリガーされます。次のようなものを使用して、HTML5 フォームの検証を手動でトリガーできます。onsubmit
isValid = form.checkValidity();
理想的には、ASP.web WebForms サイトでそのイベントをフックします。
サイトマスター
<form runat="server" onsubmit="return CheckFormValidation(this)">
<script type="text/javascript">
function CheckFormValidation(sender)
{
//Is the html5 form validation method supported?
if (sender.checkValidity)
return sender.checkValidity();
//If the form doesn't support validation, then we just assume true
return true;
}
</script>
ただし、WebForms インフラストラクチャがメソッド ハンドラーを削除し onsubmit
、独自のハンドラーに置き換えます。
<form id="ctl01" onsubmit="javascript:return WebForm_OnSubmit();" action="UserProperties.aspx?userGuid=00112233-5544-4666-7777-8899aabbccdd" method="post">
したがって、私自身の送信呼び出しは無視されます。掘り下げるとWebForm_OnSubmit
、ASP.net WebForms 検証インフラストラクチャのうさぎの穴につながるようです。
function WebForm_OnSubmit()
{
if (typeof(ValidatorOnSubmit) == "function" && ValidatorOnSubmit() == false)
return false;
return true;
}
関数を呼び出します:
var Page_ValidationActive = false;
function ValidatorOnSubmit()
{
if (Page_ValidationActive) {
return ValidatorCommonOnSubmit();
}
else
{
return true;
}
}
どの呼び出し、どの呼び出し、どの使用、どのチェック。
WebForms で HTML5 フォームの検証が必要なだけ
問題は、WebForms には、送信前にフォームをチェックし、標準化されたメカニズム (および私が使用していないインフラストラクチャ全体) を介してユーザーにエラーを表示するための巨大なインフラストラクチャがあることです。フォームのイベントを引き継ぎ、プロセスでonsubmit
(必ずしも) を使用しません。<input type="submit">
User-Agent がフォームを検証できるように ASP.net WebForms Web サイトを納得させるにはどうすればよいですか?