標準の ASP.NET Web フォーム バリデーター用にカスタムのクライアント側 JavaScript バリデーションを使用できますか?
たとえば、asp:RequiredFieldValidator を使用して、サーバー側のコードをそのままにして、jQuery を使用して独自のクライアント通知を実装し、たとえばフィールドまたは背景色を強調表示します。
標準の ASP.NET Web フォーム バリデーター用にカスタムのクライアント側 JavaScript バリデーションを使用できますか?
たとえば、asp:RequiredFieldValidator を使用して、サーバー側のコードをそのままにして、jQuery を使用して独自のクライアント通知を実装し、たとえばフィールドまたは背景色を強調表示します。
はい、そうしました。Firebug を使用して Dot.Net JS 関数を見つけ、バリデータ関数をハイジャックしました
以下はすべてのバリデーターに適用され、純粋にクライアント側です。検証が実際に実行される方法ではなく、ASP.Net 検証の表示方法を変更するために使用します。元の ASP.net 検証を確実に上書きするために、$(document).ready() でラップする必要があります。
/**
* Re-assigns a couple of the ASP.NET validation JS functions to
* provide a more flexible approach
*/
function UpgradeASPNETValidation(){
// Hi-jack the ASP.NET error display only if required
if (typeof(Page_ClientValidate) != "undefined") {
ValidatorUpdateDisplay = NicerValidatorUpdateDisplay;
AspPage_ClientValidate = Page_ClientValidate;
Page_ClientValidate = NicerPage_ClientValidate;
}
}
/**
* Extends the classic ASP.NET validation to add a class to the parent span when invalid
*/
function NicerValidatorUpdateDisplay(val){
if (val.isvalid){
// do custom removing
$(val).fadeOut('slow');
} else {
// do custom show
$(val).fadeIn('slow');
}
}
/**
* Extends classic ASP.NET validation to include parent element styling
*/
function NicerPage_ClientValidate(validationGroup){
var valid = AspPage_ClientValidate(validationGroup);
if (!valid){
// do custom styling etc
// I added a background colour to the parent object
$(this).parent().addClass('invalidField');
}
}
標準のCustomValidatorには、そのためのClientValidationFunctionプロパティがあります。
<asp:CustomValidator ControlToValidate="Text1"
ClientValidationFunction="onValidate" />
<script type='text/javascript'>
function onValidate(validatorSpan, eventArgs)
{ eventArgs.IsValid = (eventArgs.Value.length > 0);
if (!eventArgs.IsValid) highlight(validatorSpan);
}
</script>
できることは、バリデーターにフックして、次のように新しい評価メソッドを割り当てることです。
<script type="text/javascript">
rfv.evaluationfunction = validator;
function validator(sender, e) {
alert('rawr');
}
</script>
rfv は、必須フィールド バリデーターの ID です。バリデーターの JavaScript が登録された後に割り当てられるように、ページの下部でこれを行う必要があります。
CustomFieldValidator を使用してクライアント側の検証プロパティを割り当てるだけで、はるかに簡単になります。
<asp:CustomValidator ControlToValidate="txtBox" ClientValidationFunction="onValidate" />
<script type='text/javascript'>
function onValidate(sender, e)
{
alert('do validation');
}
</script>