1

The following .NET 3.5 code, placed in an aspx file, will trigger a JavaScript error when the page is loaded (for users who have JavaScript enabled):

<noscript>
    <asp:TextBox ID="txt" runat="server"></asp:TextBox>
    <asp:RequiredFieldValidator ID="txt_RequiredFieldValidator" runat="server" 
      ControlToValidate="txt"></asp:RequiredFieldValidator>
    <asp:Button ID="btn" runat="server" Text="Button" />
</noscript>

The error happens because the JavaScript generated by the ASP.NET validator control does not contain a null check on before the second code line below:

var ctl00_body_txt_RequiredFieldValidator =
  document.all ?
    document.all["ctl00_body_txt_RequiredFieldValidator"] :
    document.getElementById("ctl00_body_txt_RequiredFieldValidator");

ctl00_body_txt_RequiredFieldValidator.controltovalidate = "ctl00_body_txt";

Can anyone suggest a workaround to this?


Footnote: Why am I doing this? For my non-JavaScript users I am replacing some AJAX functionality with some different UI components, which need validation.

4

2 に答える 2

2

以下を RequiredFieldValidator に追加する必要があります。

enableclientscript="false"

これらを <noscript> タグで使用しているため、コントロールのクライアント側検証を提供しても意味がありません。JS がオフになっている場合にのみ表示されます。

これにより、サーバー側で検証が (自動的に) 強制的に実行されます。

応答を処理する前に、必ず「Page.IsValid 」を呼び出してください。

詳細については、 BaseValidator.EnableClientScriptを参照してください。

于 2009-02-16T13:34:14.517 に答える
0

JavaScript は noscript に含まれる要素を探していますか? 私の知る限り、サーバー側からスクリプトのサポートを検出する明確な方法はありません。

リダイレクトを組み込む必要があると思います (検証の失敗を気にしない場合は、ヘッダー noscript のメタリフレッシュでこれが行われるのを見てきました)。検証/制御バインディングを緩めるためにいくつかの手術を行います。これには、車輪の再発明が必要になる場合があります。これは、コントローラーとビューの間の asp.net の密結合が実際に罰する領域の 1 つです。

于 2009-02-16T12:58:19.703 に答える