2

ユーザー ID とパスワードのフィールドがあり、どちらも RequiredFieldValidator でうまく機能します。そのすぐ下に CustomValidator を配置し、パスワードが一致しない場合に分離コードから同様の検証を試みています。

<asp:RequiredFieldValidator runat="server" ID="PWRequired"   
    ControlToValidate="PasswordTextbox"  
    Display="None"  
    ErrorMessage="<b>Required Field Missing</b><br />A password is required." />
<asp:CustomValidator runat="server" ID="PWMatch"
    ControlToValidate="PasswordTextbox"  
    Display="None"
    ErrorMessage="<b>Password is Invalid</b><br />Please enter a valid password." />
<AjaxControl:ValidatorCalloutExtender 
    runat="Server"
    ID="PWValidationExtender"
    TargetControlID="PWRequired" 
    Width="185px"
    WarningIconImageUrl="/Images/warning.gif" />
<asp:TextBox ID="PasswordTextbox" runat="server" CssClass="passwordEntry" TextMode="Password"></asp:TextBox>

(正しくフォーマットされていることを願っています。「4スペース」が機能することはありません。

コードビハインドでは、PW が一致しない場合、次のことを試しています。

CustomValidator myValidator = (CustomValidator)this.FindControl("PWMatch");
myValidator.Text = "<b>Password is Invalid</b><br />Please enter a valid password."; 
ValidatorCalloutExtender myValExtender = (ValidatorCalloutExtender)this.FindControl("PWValidationExtender");
myValExtender.ID = "PWValidationExtender";
myValExtender.TargetControlID="PWMatch";
myValExtender.WarningIconImageUrl = "/Images/warning.gif";
myValExtender.Width = new Unit(250);

私が見逃しているのは、単純でばかげたものであることを願っています。私はこれを理解しようとして一日中燃えました。

よろしくお願いします。

================================================== =======================

ありがとうフリーフォール。私はそれを試してみましたが、「喜びはありません」。というわけで、ちょっと違う方向から。

次のように、CompareValidator に変更しました (繰り返しますが、マークアップが機能することを願っています)。

<asp:CompareValidator runat="server" ID="PWCompareValidator"
    ControlToValidate="PasswordTextbox"
    Operator="Equal"
    ValueToCompare="<%# GetPassword() %>"
    Text="<b>Password is Invalid</b><br />Please enter a valid password."
    Type="String" />

メッセージが表示されますが、GetPassword メソッドが呼び出されていないため、常に "false" と評価されます。これを叩き続ければ、うまくいくと思いますが、手っ取り早い解決策が見つかれば、私は完全に耳を傾けます。再度、感謝します!!

4

1 に答える 1

2

.Text使用する代わりに.ErrorMessage

だから変更...

myValidator.Text = "<b>Password is Invalid</b><br />Please enter a valid password."; 

に...

myValidator.ErrorMessage = "<b>Password is Invalid</b><br />Please enter a valid password."; 

更新(問題の更新による)

CompareValidator、実際のWebサイトで2つの値を比較するように設計されています...はValueToCompare静的な値であると想定されており、パスワードをその中に配置することで、セキュリティホールが開かれます(パスワードをに送信する可能性があるため)ブラウザ-ValueToCompare="<%# GetPassword() %>"そもそも実際に機能するかどうかは疑問ですが。)

にはCustomValidator、少なくとも1つのハンドラーを提供する必要があります...間違いなくサーバー上に1つ(OnServerValidate属性を使用)、必要に応じてブラウザー上に1つ(ClientValidationFunction属性を使用)。チェックの結果に応じてパラメーターのIsValid属性を設定する必要があるのは、ハンドラー内です。args

(クライアント側のスクリプトは簡単に回避できるため、「サーバー上で間違いなく1つ」と言います。そのため、サーバー上に何かを置いて、誰かが試みているのを捕まえる必要があります。)

あなたが何をしようとしているのか、あるいはあなたが現在何をしているのかが100%明確ではないので、私が上に示した以外の直接的なアドバイスを与えることは困難です。


最終更新

パスワードを確認しようとしているので、これが必要だと思うものの例です...

Password: <asp:TextBox runat="server" id="txtPassword"/>
<asp:RequiredFieldValidator runat="server" id="reqPassword"
   ControlToValidate="txtPassword" ErrorMessage="Provide Password" />
<asp:CustomValidator runat="server" id="cusPassword"
   ControlToValidator="txtPassword" ErrorMessage="Incorrect Password"
   OnServerValidate="cusPassword_ServerValidate"/>

次に、コードビハインドで、ハンドラーが必要です

protected void cusPassword_ServerValidate(object sender, ServerValidateEventArgs args)
{
  args.IsValid = (txtPassword.Text == GetPassword());
}
于 2012-11-13T14:54:16.823 に答える