6

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 サイトを納得させるにはどうすればよいですか?

こちらもご覧ください

4

1 に答える 1