9

ユーザーが関連フィールドの要件を満たさなかったすべての検証メッセージをログに記録したいページがあります。

問題は、ポストバック/ボタンのクリックが発生しないことです (おそらくクライアント側の検証のため)。そのため、ユーザーが実際にすべてのフィールドを正しく取得する前にログが記録されません (検証エラーはありません)。

ボタン クリック イベント メソッド:

protected void btnNext_Click(object sender, EventArgs e)
{
    Page.Validate();
    if(Page.IsValid)
    {
        //code
    }
    else
    {
        foreach (IValidator validator in Validators)
        {
            if (!validator.IsValid)
            {
                PageValidatorErrors error = new PageValidatorErrors
                              {
                                  WebsiteID = AppState.WebsiteID,
                                  Page = Request.Url.AbsolutePath,
                                  URL = Request.Url.ToString(),
                                  UserIP = Tools.GetIP(),
                                  ErrorMessage = validator.ErrorMessage,
                                  CreatedDate = DateTime.Now
                               };
                pageValidatorErrorsRep.insert(error);
            }
        }
    }
}

これらのメッセージをログに記録するにはどうすればよいですか?

編集:

<script type="text/javascript">
    function validatePage()
    {
        if (window.Page_IsValid != true)
        {
            //Page_Validators is an array of validation controls in the page. 
            if (window.Page_Validators != undefined && window.Page_Validators != null)
            {
                //Looping through the whole validation collection. 
                for (var i = 0; i < window.Page_Validators.length; i++)
                {
                    window.ValidatorEnable(window.Page_Validators[i]);

                    //if condition to check whether the validation was successfull or not. 
                    if (!window.Page_Validators[i].isvalid)
                    {
                        var errMsg = window.Page_Validators[i].getAttribute('ErrorMessage');
                        alert(errMsg);
                    }
                }
            }
        }
    }
</script>
4

2 に答える 2

3

これがソリューションの一部です。クライアント側で呼び出すことで、validates /truefalseを取得できます。

http://razeeb.wordpress.com/2009/01/11/calling-aspnet-validators-from-javascript/

function performCheck()
{

if(Page_ClientValidate())
{

//Do something to log true/ false
}

}
于 2012-11-14T16:30:40.400 に答える
2

すべてのバリデーターの EnableClientScript プロパティを false に変更してみてください。すべての検証はサーバー側でのみ行われます。

于 2012-11-14T16:27:32.083 に答える