0

اعتبار سنجی فرمها به صورت سفارشی

 
amirpetrucci0261
amirpetrucci0261
کاربر طلایی1
تاریخ عضویت : تیر 1388 
تعداد پست ها : 27726
محل سکونت : http://zoomstar.ir/

اعتبار سنجی فرمها به صورت سفارشی
چهارشنبه 10 آذر 1389  5:13 AM

تصور کنید که 2 بخش منطقی در وب فرم خود دارید که کنترلهای مورد نیاز در آنها قرار دارند. این کنترلها بسته به نوع دکمه ای که کاربر روی آن کلیلک میکند یک نوع متفاوت اعتبار سنجی را خواهند داشت. شما میخواهید به طور پویا و با استفاده از کد نوع بخصوص اعتبارسنجی کنترلهای خود را انجام دهید.
 
در این حالت برای هر گروه از کنترلها و دکمه ای که برای ارسال آن گروه وجود دارد یک نام خاص به ValidationGroup آنها میدهیم. این کار باعث میشود زمانی که دکمه ارسال مورد نظر کلیک شد تنها آن دسته از کنترلهایی که با آن دکمه در یک گروه قرار دارند اعتبارسنجی شوند.
سپس برای دکمه ها ارسال داده ها میبایست ویژگی CausesValidation را با false مقدار دهی کنیم تا هیچ گونه اعتبار سنجی سمت کلاینت یا سرور در زمان کلیلک شدن دکمه توسط asp.net انجام نگیرد.
پس از انجام مراحل فوق، در کد پشت صفحه میبایست :
1- یک مدیر رخداد ( event handler ) برای هر دکمه تعریف کنیم
2- کدهای لازم را به مدیر رخدادها اضافه کنیم تا مجموعه اعتبارسنج های اختصاص یافته به دکمه مذکور را بدست آوریم.
3- در مجموعه فوق پیمایش کرده و اعتبارسنجی مورد نظر را انجام دهیم.
شما میباید به صورت متناوب فرآیند اعتبارسنجی که asp.net به طور نرمال انجام میدهد را به گونه ای دیگر انجام دهید. Asp.net امکان دریافت یک مجموعه شامل یک گروه بخصوص از همه اعتبارسنج های روی فرم را به ما میدهد. این مجموعه را میتوان به این شکل دریافت نمود:

ValidatorCollection allValidators;
allValidators = Page.Validators;

مجموعه اعتبارسنج های اختصاص یافته به یک گروه خاص را نیز میتوان اینگونه بدست آورد:

validators = Page.GetValidators([name of desired group]);

دقت کنید که کد دکمه های ارسال مطابق زیر است

<input id="btnLogin" runat="server" type="button"
value="Login" CausesValidation="false"
onserverclick="btnLogin_Click"
validationgroup="LoginGroup" >

<input id="btnRegister" runat="server" type="button"
value="Register" CausesValidation="false"
onserverclick="btnRegister_ServerClick"
validationgroup="RegisterGroup" >

در کد پشت صفحه متدی به نام groupIsValid تعریف نموده ایم که عمل اعتبار سنجی را بر روی آن دسته از کنترلهایی که در گروه بخصوصی (که نام این گروه به تابع ارسال میشود) انجام میدهد و چنانچه تمامی کنترلهای موجود در گروه معتبر باشند true برخواهد گردانید.


همچنین در مدیر رخدادهای دکمه ها به جای استفاده از Page.IsValid ، از متد groupIsValid استفاده میکنیم تا ببینیم آیا کنترلهای موجود در گروه مورد نظر همگی معتبر هستند یا خیر.


کد صفحه aspx موردنظر به این شرح خواهد بود:

<div align="center" class="pageHeading">
Programmatic Validation (VB)
</div>
<table align="center" class="dataEntry">
</tr>
<td colspan="2" align="left">
<asp:ValidationSummary id="vsLoginErrors" Runat="server"
CssClass="alertText"
DisplayMode="BulletList"
EnableClientScript="False"
HeaderText="Error Summary"
ValidationGroup="LoginGroup" />
<asp:CustomValidator id="cvAuthentication" Runat="server"
Display="None"
EnableClientScript="False"
ErrorMessage="Login ID or Password Is Invalid"
OnServerValidate="cvAuthentication_ServerValidate"
ValidationGroup="LoginGroup" />
</td>
</tr>
</tr>
<td class="LabelText">Login ID: </td>
<td>
<asp:TextBox id="txtLoginID" Runat="server"
Columns="30" CssClass="LabelText" />
<asp:RequiredFieldValidator id="rfvLoginID"
Runat="server"
ControlToValidate="txtLoginID"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ErrorMessage="Login ID Is Required"
ValidationGroup="LoginGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:RequiredFieldValidator>
</td>
</tr>
</tr>
<td class="LabelText">Password: </td>
<td>
<asp:TextBox id="txtPassword" Runat="server"
TextMode="Password"
Columns="30" CssClass="LabelText" />
<asp:RequiredFieldValidator id="rfvPassword"
Runat="server"
ControlToValidate="txtPassword"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ErrorMessage="Password Is Required"
ValidationGroup="LoginGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:RequiredFieldValidator>
</td>
</tr>
</tr>
<td colspan="2" align="center">
<br/>
<input id="btnLogin" runat="server" type="button"
value="Login" causesvalidation="false"
onserverclick="btnLogin_Click"
validationgroup="LoginGroup" />
</td>
</tr>
</table>
<hr />
<table align="center" class="dataEntry">
</tr>
<td colspan="2" align="left">
<asp:ValidationSummary id="vsRegistrationErrors" Runat="server"
CssClass="alertText"
DisplayMode="BulletList"
EnableClientScript="False"
HeaderText="Error Summary"
ValidationGroup="RegisterGroup" />
</td>
</tr>
</tr>
<td class="LabelText">Login ID: </td>
<td>
<asp:TextBox id="txtNewLoginID" Runat="server"
Columns="30" CssClass="LabelText" />
<asp:RequiredFieldValidator id="rfvNewLoginID"
Runat="server"
ControlToValidate="txtNewLoginID"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ErrorMessage="Login ID Is Required"
ValidationGroup="RegisterGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:RequiredFieldValidator>
</td>
</tr>
</tr>
<td class="LabelText">Email Address: </td>
<td>
<asp:TextBox id="txtEmailAddress" Runat="server"
Columns="30" CssClass="LabelText" />
<asp:requiredfieldvalidator id="rfvEmailAddress"
runat="server"
controltovalidate="txtEmailAddress"
cssclass="alertText"
display="Dynamic"
enableclientscript="False"
ErrorMessage="Email Address Is Required"
ValidationGroup="RegisterGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:requiredfieldvalidator>
<asp:RegularExpressionValidator id="revEmailAddress"
Runat="server"
ControlToValidate="txtEmailAddress"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"
ErrorMessage="Invalid Email Address"
ValidationGroup="RegisterGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:RegularExpressionValidator>
</td>
</tr>
</tr>
<td class="LabelText">Password: </td>
<td>
<asp:TextBox id="txtPassword1" Runat="server"
TextMode="Password"
Columns="30" CssClass="LabelText" />
<asp:RequiredFieldValidator id="rfvPassword1"
Runat="server"
ControlToValidate="txtPassword1"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ErrorMessage="Password Is Required"
ValidationGroup="RegisterGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:RequiredFieldValidator>
</td>
</tr>
</tr>
<td class="LabelText">Re-enter Password: </td>
<td>
<asp:TextBox id="txtPassword2" Runat="server"
TextMode="Password"
Columns="30" CssClass="LabelText" />
<asp:RequiredFieldValidator id="rvPassword2"
Runat="server"
ControlToValidate="txtPassword2"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ErrorMessage="Re-Entered Password Is Required"
ValidationGroup="RegisterGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:RequiredFieldValidator>
<asp:CompareValidator ID="cvPassword2" runat="server"
ControlToValidate="txtPassword2"
ControlToCompare="txtPassword1"
CssClass="alertText"
Display="Dynamic"
EnableClientScript="False"
ErrorMessage="Both Passwords Must Match"
ValidationGroup="RegisterGroup" >
<img src="images/arrow_alert.gif" alt="arrow"/>
</asp:CompareValidator>
</td>
</tr>
</tr>
<td colspan="2" align="center">
<br/>
<input id="btnRegister" runat="server" type="button"
value="Register" causesvalidation="false"
onserverclick="btnRegister_ServerClick"
validationgroup="RegisterGroup" />
</td>
</tr>
</table>

و کد پشت صفحه نیز چنین خواهد بود:

using System;
using System.Configuration;
using System.Data;
using System.Data.OleDb;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace ASPNetCookbook.CSExamples
{
/// <summary>
/// This class provides the code behind for
/// CH03ProgrammaticValidationCS.aspx
/// </summary>
public partial class CH03ProgrammaticValidationCS : System.Web.UI.Page
{
///***********************************************************************
/// <summary>
/// This routine provides the event handler for the authentication server
/// validate event. It is responsible checking the login ID and password
/// in the database to authenticate the user.
/// </summary>
/// <param name="sender">Set to the sender of the event</param>
/// <param name="e">Set to the event arguments</param>
protected void cvAuthentication_ServerValidate(Object source,
System.Web.UI.WebControls.ServerValidateEventArgs args)
{
OleDbConnection dbConn = null;
OleDbCommand dCmd = null;
String strConnection = null;
String strSQL = null;
try
{
// initially assume credentials are invalid
args.IsValid = false;
// get the connection string from web.config and open a connection
// to the database
strConnection = ConfigurationManager.
ConnectionStrings["dbConnectionString"].ConnectionString;
dbConn = new OleDbConnection(strConnection);
dbConn.Open( );
// build the query string and check to see if a user with the
// entered credentials exists in the database
strSQL = "SELECT AppUserID FROM AppUser " +
"WHERE LoginID=? AND " +
"Password=?";
dCmd = new OleDbCommand(strSQL, dbConn);
dCmd.Parameters.Add(new OleDbParameter("LoginID",
txtLoginID.Text));
dCmd.Parameters.Add(new OleDbParameter("Password",
txtPassword.Text));
// check to see if the user was found
if (dCmd.ExecuteScalar( ) != null)
{
args.IsValid = true;
}
} // try
finally
{
// cleanup
if (dbConn != null)
{
dbConn.Close( );
}
} // finally
} // cvAuthentication_ServerValidate
///***********************************************************************
/// <summary>
/// This routine provides the event handler for the login button click
/// event. It is responsible for providing access to the site for the
/// user if authenticated.
/// </summary>
/// <param name="sender">Set to the sender of the event</param>
/// <param name="e">Set to the event arguments</param>
protected void btnLogin_Click(Object sender,
System.EventArgs e)
{
// check to see if all entered login data is valid
if (groupIsValid("LoginGroup"))
{
// user has been authenticated so proceed with allowing access
// to the site
}
} //btnLogin_Click
///***********************************************************************
/// <summary>
/// This routine provides the event handler for the register button click
/// event. It is responsible for processing the form data for
/// registration.
/// </summary>
/// <param name="sender">Set to the sender of the event</param>
/// <param name="e">Set to the event arguments</param>
protected void btnRegister_ServerClick(Object sender,
System.EventArgs e)
{
// check to see if all entered registration data is valid
if (groupIsValid("RegisterGroup"))
{
// all entered data is valid so proceed with registration
}
} //btnRegister_ServerClick
///***********************************************************************
/// <summary>
/// This routine iterates through validators for the passed group
/// performing the validation.
/// </summary>
/// <param name="validatorGroup">Set to the name of the validator
/// group to perform validation on.
/// </param>
/// <returns>True if all validators in the group are valid.
/// Else, False.
///</returns>
private Boolean groupIsValid(String validatorGroup)
{
ValidatorCollection validators = null;
Boolean isValid = true;
// get the validators in the Register group
validators = Page.GetValidators(validatorGroup);
// iterate through the validators calling the Validate methods
// and checking to see if the validation was succcessful
foreach (IValidator validator in validators)
{
validator.Validate( );
if (!validator.IsValid)
{
isValid = false;
}
} // foreach validator
return (isValid);
} // groupIsValid
} // CH03ProgrammaticValidationCS
}

تشکرات از این پست
دسترسی سریع به انجمن ها