عنوان:

‫تعیین اعتبار یک checkBoxList با کمک jQuery


نویسنده: وحید نصیری
تاریخ: ۱۳۸۸/۰۵/۱۹ ۱۶:۰۸:۰۰
آدرس: www.dntips.ir

checkBoxList جزو کنترل‌هایی در ASP.Net است که نمی‌توان RequiredFieldValidator استاندارد را بر آن اعمال کرد. به عبارتی اگر نیاز بود حداقل یک آیتم چک باکس لیست حتما توسط کاربر انتخاب شود، راه حل آماده‌ای برای آن وجود ندارد. پیاده سازی این‌کار با استفاده از jQuery به سادگی میسر است که در ادامه آن‌را مرور خواهیم کرد.

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CheckBoxListValidator._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
function CheckItems(sender, args) {
//Get the total nuumber of selected CheckBoxes
var num = jQuery("table#<%=CheckBoxList1.ClientID%> input:checked").length;
args.IsValid = num > 0;
}
//]]>
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CheckBoxList ID="CheckBoxList1" runat="server">
<asp:ListItem>item1</asp:ListItem>
<asp:ListItem>item2</asp:ListItem>
</asp:CheckBoxList>
<asp:CustomValidator ClientValidationFunction="CheckItems" ID="ValidateIt"
runat="server" ErrorMessage="(*)"> </asp:CustomValidator>
<asp:Button ID="Button1" runat="server" />
</div>
</form>
</body>
</html>

توضیحات:
یک CustomValidator استاندارد را به فرم اضافه کرده‌ایم تا توسط تابعی که به ClientValidationFunction آن معرفی می‌شود، کار اعتبار سنجی سمت کاربر را انجام دهد. این تابع یا همان CheckItems مثال فوق، امضای استاندارد و آشنایی دارد. اگر تعیین اعتبار صورت گرفته باشد، باید args.IsValid در آن به true تنظیم شود یا بر عکس.
اصل قضیه هم، همین یک سطر کد زیر است:

var num = jQuery("table#<%=CheckBoxList1.ClientID%> input:checked").length;
کار این سطر که از جی‌کوئری استفاده می‌کند، پیدا کردن جدولی است که ID آن مساوی آی دی سمت کلاینت چک باکس لیست ما است (ASP.Net یک چک باکس لیست را به صورت یک جدول حاوی چک باکس‌ها رندر می‌کند). سپس در همان ناحیه مشغول به جستجوی چک باکس‌هایی می‌شود که تیک خورده‌اند. نهایتا تعداد آن‌ها را بر می‌گرداند.

نظرات

  • مهمان در ۱۳۸۸/۰۵/۱۹ ۲۰:۳۰:۰۶
    با سلام خدمت استاد نصیری
    می دونم که این مطلب به پست شما ربطی نداره ولی خواهش می کنم راهنمایی کنید.

    آفای نصیری مطلبی رو پیدا کردم که توسط اون میشه از توابع نوشته شده در C# در Crystal report استفاده کرد:
    اما هر کاری می کنم که اون رو در بخش فرمول نویسی در بخش Additional function ببینم اصلا گزینه مربوطه (همون فایل dll)نمایش داده نمی شه.
    روی چند سیستم هم این کارو انجام دادم ولی گزینه مورد نظر وجود نداشته!!!

    چیکار کنم؟
  • وحید نصیری در ۱۳۸۸/۰۵/۲۰ ۰۰:۱۶:۳۰
    سلام،
    این dll ها (یا اسمبلی‌های دات نتی) باید ComVisible شوند تا در Crystal report دیده شوند. بعلاوه در تنظیمات پروژه باید تیک مربوط به Register for COM Interop در برگه build گذاشته شود (مهم).
    توضیح قدم به قدم آن در این‌جا هست:
    http://msdn.microsoft.com/en-us/library/ms227603(VS.80).aspx
  • مهمان در ۱۳۸۸/۰۵/۲۵ ۲۰:۴۸:۲۹
    ممنون وحید جان
    مشکلم حل شد.
    از اینکه جواب دادید واقعا ممنون
  • مهمان در ۱۳۸۸/۰۸/۲۱ ۱۳:۳۸:۰۰
    ممنون ، خیلی جالب بود !