PDA

View Full Version : سوال: چطور از jquery برای کنترلهای درون updatePanel استفاده کنم؟



shahrzad87
جمعه 12 خرداد 1391, 14:04 عصر
سلام
من این جی کوئری رو نوشتم:



<script type="text/javascript">
$(document).ready(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
});
$(document).ready(function () {
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
});
$(document).ready(function () {
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});
</script>



اما چون کنترل توی updatePanel قرار داره جی کوئری اجرا نمیشه، باید چکار کنم؟ :متفکر:

shahrzad87
جمعه 12 خرداد 1391, 17:52 عصر
یکی از دوستان نظر دادن که : " vaghty az update panel estefade mikony khily az event ha frizeee mishe, update panel khily cost esh balahast estefade nakony behtare "
درسته ؟ پس از چی استفاده کنم ؟
من چندتا ddl دارم که مقداراشون با توجه به آیتم انتخاب شده هم پر میشه، بهتررین روش چیه ؟؟

Behrouz_Rad
جمعه 12 خرداد 1391, 20:23 عصر
چون محتویاتی که درون Update Panel قرار گرفتن، با محتویات دریافت شده از Server هنگام دریافت پاسخ جایگزین میشن، رویدادهایی که به تگ های درون Update Panel اختصاص میدید هم از بین میرن.
راه حل، استفاده از شی PageRequestManager و استفاده از متد add_endRequest اون هست. این متد پس از دریافت پاسخ از Server و قرار گرفتن محتویات در صفحه فراخوانی میشه. شی PageRequestManager در هنگام استفاده از Update Panel وجود داره. در متد add_endRequest اون، فرایند نسبت دادن رویدادها به تگ ها رو مجدداً انجام بدید.

<script type="text/javascript">
$(document).ready(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
});
$(document).ready(function () {
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
});
$(document).ready(function () {
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function() {
$('.Mask2Digit').mask("99", { placeholder: "_" });
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});
</script>

موفق باشید.

shahrzad87
جمعه 12 خرداد 1391, 20:34 عصر
من کدی که گفتین نوشتم اما مشکلم حل نشد!! اولین بار که page load میشه درست هست اما وقتی postback می شه دیگه جی کوئری کار نمی کنه! :متفکر:



<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script src="../Js/jquery-1.4.1.js" type="text/javascript"></script>
<script src="../Js/jquery.maskedinput-1.3.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
});
$(document).ready(function () {
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
});
$(document).ready(function () {
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});
</script>
</asp:Content>

Behrouz_Rad
دوشنبه 15 خرداد 1391, 17:21 عصر
PostBack؟ زمانی که از Update Panel استفاده می کنید، PostBack معنا نداره.

shahrzad87
دوشنبه 15 خرداد 1391, 21:45 عصر
ببینید من یک ddl دارم که وقتی آیتم انتخابیش تغییر می کنه بقیه txtboxها فعال یا غیرفعال میشن و مجموعه این ddl و txtbox ها رو توی UPanle گذاشتم، وقتی AutoPostback ddl برابر false بود کار نمی کرد اما true گذاشتم درست شد، الان مشکل اینه که txtbox که با جی کوئری بهش ماسک دادم و توی این پنل هست کار نمی کنه، باید چکار کنم ؟؟؟
راه حلی دارین آقای Behrouz_Rad (http://barnamenevis.org/member.php?7945-Behrouz_Rad) ؟؟

shahrzad87
دوشنبه 15 خرداد 1391, 21:47 عصر
من کدی که گفتین نوشتم اما مشکلم حل نشد!! اولین بار که page load میشه درست هست اما وقتی postback می شه دیگه جی کوئری کار نمی کنه! :متفکر:



<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
<script src="../Js/jquery-1.4.1.js" type="text/javascript"></script>
<script src="../Js/jquery.maskedinput-1.3.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
});
$(document).ready(function () {
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
});
$(document).ready(function () {
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});

var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});
</script>
</asp:Content>


این کد کار نکرد و توی IE هم Error داره و صفحه خطا نشون میده!

Behrouz_Rad
سه شنبه 16 خرداد 1391, 07:52 صبح
روال Bind مجدد رو باید در ready handler انجام بدید.

$(function () {
var prm = Sys.WebForms.PageRequestManager.getInstance();

prm.add_endRequest(function () {
$('.Mask2Digit').mask("99", { placeholder: "_" });
$('.Mask10Digit').mask("9999999999", { placeholder: "_" });
$('.MaskDate').mask("9999/99/99", { placeholder: "_" });
});
});

Variable
سه شنبه 16 خرداد 1391, 14:04 عصر
سلام . منم یه مشکل اساسی با همین از بین رفتن داده های قبلی توسط اپدیت پنل دارم. یعنی با انتخاب یه دراپ دان . یه جدول میسازم . ولی وقتی رو باتن کلیک میکنم . اون جدول پاک میشه .
همه این ها تو اپدیت پنل هست .
همه چی درست کارمیکنه . ولی داده های قبلی یعنی جدولم بازدن دکمه ایی که برای گرفتن اطلاعات جدول هست. همش از بین میره

حالا میشه کمکم کنید نحوه کار چه طوری هست .
خیلی هم فوری نیاز دارم ..مممنونم

shahrzad87
سه شنبه 16 خرداد 1391, 14:20 عصر
اگر کدتون رو اینجا کپی کنید میتونم کمکتون کنم...

shahrzad87
سه شنبه 16 خرداد 1391, 14:32 عصر
برای مقدار دادن به جدول یا گریدویو بهتر هست که اطلاعات رو توی dataTable بریزید و بعد اون رو به دیتاسورس گرید یا جدول نسبت بدید، اینجوری مقدارش از بین نمیره.

Variable
سه شنبه 16 خرداد 1391, 15:47 عصر
خیلی خیلی ممنونم که اینقدر زود جواب دادید . من هر دو کد ای اس پی و سیشارپ رو براتو میذارم .
فقط کافیه ران کنید. من بجای وصل شدن به دیتابیس از ارایه استفاده کردم تا مشکلم روببینید
فقط خیلی عجله دارم . اخخه این مسئله مثله یه گره افتاده تو کارم و باز نمیشه . نمیذاره پیش برم .
رو دکمه ادد اگه کلیک کنید . جدول پاک میشه .

shahrzad87
سه شنبه 16 خرداد 1391, 21:35 عصر
شما باید ddl و جدول رو توی یک UPdatePanel بگذارید.



<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="drop_ostan" runat="server" AutoPostBack="true"
OnSelectedIndexChanged="createTable">
</asp:DropDownList>
<asp:Table ID="mainTabel" runat="server" ></asp:Table>

</ContentTemplate>
</asp:UpdatePanel>

shahrzad87
سه شنبه 16 خرداد 1391, 22:58 عصر
فکر می کنم چون جدول زمان اجرا ساخته میشه با آپدیت شدن پنل از بین میره... میشه با این کد دوباره جدول رو ساخت، اما من نمی دونم کاربرد این جدول تو پروژه چی هست نمی دونم اینجوری مشکل حل میشه یا نه ...


protected void addCity(object sender, EventArgs e)
{
lbl.Text = drop_ostan.SelectedValue;
createTable(null, null);
}

Variable
چهارشنبه 17 خرداد 1391, 09:58 صبح
بله حق با شماست ..
میدونی باید رویداد مربوط به دراپ دان رو حذف میکردم . بدون رویداد . بعدش در پیج لود دوباره این تابع addCity رو فراخونی میکردم
یعنی یه جورایی دورش زدم . چون بخای نخای عمل پست بک انجام میشه . خب ماهم سو استفاده میکنیمو بقیه رویداد هارو حذف میکنیم . واز همین پست بک استفاده میکنیم . که رویداد پیج لود رو اجرا میکنه .
به هر حال درست شد.. ممنونم . ولی کلا تجربه بدی بود. اصلا خوشم از نحوه کار این ای اس اپی نیومد. جاوا ا سکریپتی نوشتن خیلی ساده تره با اینکه طولانی تره

protected void Page_Load(object sender, EventArgs e)
{
if (!(IsPostBack))
{
createDropOstan(null, null);
}
createTable(null, null);
}