PDA

View Full Version : سوال: فراخوانی فانکشن jquery از سمت سرور



mahshad2005
دوشنبه 17 خرداد 1389, 20:51 عصر
با سلام و خسته نباشید از شما دوستان :لبخندساده:
من می خوام با استفاده از popup ها (دیالوگ باکس)،پیغام های سمت سرور را فرضا در پیغام های بکار رفته در
try -catch ها ،پیام ها در دیالوگ نمایش داده شوند .
اما نمیدونم چطور فانکشن سمت کلاینت jquery را سمت سرور صدا بزنم و اجرا کنم
ممنونم:قلب:

mehdi.mousavi
سه شنبه 18 خرداد 1389, 00:34 صبح
با سلام و خسته نباشید از شما دوستان :لبخندساده: من می خوام با استفاده از popup ها (دیالوگ باکس)،پیغام های سمت سرور را فرضا در پیغام های بکار رفته در
try -catch ها ،پیام ها در دیالوگ نمایش داده شوند . اما نمیدونم چطور فانکشن سمت کلاینت jquery را سمت سرور صدا بزنم و اجرا کنم ممنونم:قلب:

سلام.
از چه تکنولوژی Server-Side ای برای تولید HTML استفاده می کنید؟ ASP، ASP.NET، PHP، ..؟

موفق باشید.

mahshad2005
سه شنبه 18 خرداد 1389, 18:33 عصر
ASP.NET و زبان C#
متشکرم

mehdi.mousavi
سه شنبه 18 خرداد 1389, 18:45 عصر
ASP.NET و زبان C#‎
متشکرم

سلام.
شما میتونید بدین شکل هر تابع Client-Side ای رو که مایل بودید از طریق کد Server-Side زیر فراخوانی کنید:


if (!Page.ClientScript.IsClientScriptBlockRegistered("MyScriptKeyName"))
{
string script = "alert('this is a test');";
Page.ClientScript.RegisterStartupScript(Page.GetTy pe(), "MyScriptKeyName", script, true);
}


در کد فوق، من alert رو فراخوانی کرده ام. شما میتونید تابع مورد نظر خودتون رو (که میتونی یکی از توابع jQuery نیز باشه)، فراخوانی کنید.

موفق باشید.

mahshad2005
سه شنبه 18 خرداد 1389, 20:30 عصر
خیلی خیلی ممنونم از راهنمایتون :لبخندساده:
در ضمن "MyScriptKeyName" میشه توضیح بدین چیه و همینطور راجع به پارامتر های که پاس داده میشه مثل
true
در کد زیر

Page.ClientScript.RegisterStartupScript(Page.GetTy pe(), "MyScriptKeyName", script, true)

سوال بعدی هم این که در قسمت فراخوانی تابع کافیه اسم تابع را بیاریم و دیگه نمیخواهد کل فانکشن را اینجا بیارم (فانکشن در سمت کلاینت باشه و سمت سرور فقط اسم فانکشن کفایت می کنه؟)


ClientScript.RegisterClientScriptBlock()
فرق این دستور و زمان استفاده این دستور با دستوری که شما دادین چیه؟
بازم ممنون

mahshad2005
سه شنبه 18 خرداد 1389, 22:05 عصر
اینجا پیشنهاد داده که به جای gettype() از typeof() استفاده کنیم

http://blogs.ipona.com/james/archive/2006/10/03/6710.aspx

mehdi.mousavi
چهارشنبه 19 خرداد 1389, 16:28 عصر
سلام.
فرض کنید شما یک ASP.NET Server Control ای دارید که قراره برای انجام بخشی از وظائفش خودش، کد JavaScript ای رو سمت Client ثبت کنه. طبیعتا انتظار نداریم که در صورت استفاده شدن از این کنترل بیش از یک بار در صفحه، کد JavaScript ای ما نیز بیش از یک بار روی صفحه Render بشه. برای اینکه بتونیم چنین چیزی رو کنترل کنیم، باید شناسه ای برای َScript خودمون در نظر بگیریم و اونو توسط دستور RegisterStartupScript ثبت کنیم. این شناسه همون string ای هستش که من اسمش رو MyScriptKeyName گذاشتم و طبیعتا شما باید اون رشته رو با رشته خواناتری که گویای وظیفه JavaScript Block شما هستش، عوض کنید. تابع IsClientScriptBlockRegistered نیز با گرفتن شناسه مزبور چک میکنه که آیا قبلا برای صفحه فعلی کد JavaScript ای مورد نظر Register شده یا خیر.

پارامتر آخر در تابع RegisterStartupScript که من اونو true رد کردم، مبین این مطلب هستش که "ای تابع، خودت تگ <script> رو برای کد JavaScript ای من اضافه کن، چون من توی string ای که بهت بعنوان کد Script داده ام، تگ مزبور رو نذاشته ام". طبیعتا در صورتیکه <script></script> رو در درون پارامتر یکی مونده به آخر بذارید، باید پارامتر آخر رو false رد کنید.

اما تفاوت تابع RegisterClientScriptBlock و RegisterStartupScript در چیه؟ تابع اول، کد Script مورد نظر شما رو با کلید داده شده، در بالای HTML و پس از تگ <form> قرار میده در صورتیکه RegisterStartupScript اسکریپت مورد نظر رو قبل از تگ </form> قرار میده. بنابراین باید دقت کنید که در Script خودتون چه هنگام به Element های Page دسترسی پیدا میکنید، چون ممکنه در لحظه اجرای کد شما، هنوز Element مورد نظرتون وجود نداشته باشه. اگر میخواهید تابع مورد نظر هنگام load شدن صفحه و قبل از فراخوانی OnLoad سمت سرور اجرا بشه، از RegisterStartupScript استفاده کنید.

در مورد GetType و typeof ... داستانی که تعریف کرده در شرایطی درسته که شما کنترلی داشته باشید و کنترل جدیدی از کنترل قبلی مشتق کنید و ... بله. در این حالت GetType کلاس Derived شده تایپ کلاس Derived شده رو برمیگردونه، اما GetType کلاس Base تایپ کلاس Base رو بر میگردونه و این باعث میشه تا Script مورد نظر شما دوبار Register بشه. بنابراین باید حواستون باشه که کجا و به چه شکلی میخواهید Script رو Register کنید.

موفق باشید.

Mostafa_Dindar
چهارشنبه 23 تیر 1389, 17:12 عصر
سلام ,

در صورتی که از UpdatePanel استفاده کرده باشیم , چطور میتونیم متدههای جاوااسکریپتی یا جی کوئری رو در ServerSide فراخوانی کنیم ؟

مرسی

mehdi.mousavi
چهارشنبه 23 تیر 1389, 17:25 عصر
سلام در صورتی که از UpdatePanel استفاده کرده باشیم , چطور میتونیم متدههای جاوااسکریپتی یا جی کوئری رو در ServerSide فراخوانی کنیم ؟ مرسی

سلام.
با استفاده از ScriptManager و متودهایی که روی این کلاس قرار داره، مثل ScriptManager.RegisterClientScriptBlock، ScriptManager.RegisterStartupScript و ...

موفق باشید.