PDA

View Full Version : سوال: Page Method



RoostaYeBekr
شنبه 16 آذر 1387, 00:11 صبح
با سلام
یک نفر راجع به Page Method ها در پست زیر گفته بود که : می تواند به وسلیه Page Method میشه خیلی راحت و احتمال بدون اینکه حجم صفحه ما زیاد بشه ، رفتاری شبیه به Update Panel آجاکس رو انجام داد.
http://barnamenevis.org/forum/showthread.php?t=133829
یکی اینکه آیا حرف ایشان درست است ؟
بعد کسی می تونه یک نمونه کد کوچک برای انجام این کار بده ؟
آخه من توی همین سایت هم که search کردم ، خیلی مطلب مفیدی در این زمینه پیدا نکردم.
:لبخندساده:
ممنون.

hadi000333
شنبه 16 آذر 1387, 01:25 صبح
نه !
آیا تا حالا از متد های webservice تو Ajax استفاده کردی ؟
باید بگم Page method تنها فرقش با اون اینه که یک متد است در همان صفحه
تنها کاری که با اون می تونی بکنی اینه که توسط java script یک متد که در صفحه( ServerSide) ASpx.cs
رو فرا خوانی کنی و چون این متد حتما باید از نوع static باشه پس به هیچ یک از کنترل های صفحه دسترسی نداری چون اونها protected هستند. از طریق این متد می تونی یک مقدار رو به client بدون انجام Post Back بر گردونی این مهمترین کاریه که می تونی با هاش انجام بدی!
من یک uploader با اون تو پروژم داشتم که مقدار Progress رو Update می کرد.
اما پروژم رو به طور کامل ندارم که کدش رو برات بذارم اما اگه search کنی مطمعنم مثال های خوبی پیدا می کنی.

RoostaYeBekr
شنبه 16 آذر 1387, 21:56 عصر
با سلام
می شه یک نمونه کد کوچک راجع به PageMethod ها بگذارید.
حالا اگر از کاربردهاش هم گفتید ، که دیگه خیلی بهتره.

hadi000333
یک شنبه 17 آذر 1387, 02:40 صبح
با سلام
می شه یک نمونه کد کوچک راجع به PageMethod ها بگذارید.
حالا اگر از کاربردهاش هم گفتید ، که دیگه خیلی بهتره.


این یه مثاله خیلی ساده هستش
الان نوشتم

در سمت سرور
:

[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static string getDate()
{
string myDate = DateTime.Now.ToString();

return myDate;
}



و همچنین:

<head id="Head1" runat="server">
<title>hadi0003333</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager runat="server" ID="ScriptManager01" EnablePageMethods="true" />

<script type="text/javascript">
function pageLoad(){
PageMethods.getDate(function(result){
if(result){
alert(result);

}
});
}
</script>

</form>
</body>
</html>
کاربردش رو بسته به نیازت تو برنامه است.
می تونی به این متد یک پارامتر هم بدی ...
موفق باشی.

پیش نمایش :

RoostaYeBekr
دوشنبه 18 آذر 1387, 16:52 عصر
با سلام
دستتون درد نکنه . کدش خیلی راحت اجرا شد.

فقط یک سوالی برام باقی مونده :
البته می دونم که خواستید جواب درخواست من را مبنی بر ارائه ی یک نمونه کد کوچک با PageMethod ها بدهید . راستش این کدی که نوشتید ، می تونست با جاوااسکریپت هم پیاده سازی شود یا اصلا بدون آن. به خاطر همین ، من هنوز خیلی متوجه نشدم که این PageMethod ها ، چه کاربردی می تواند داشته باشد که خود برنامه یا جاوااسکریپت نتواند از عهده ی آن برآید.

منظور اینکه این PageMethod ها ، چه کاربردی دارد که آن را به عنوان یک تکنیک از سایر تکنیک ها مجزا کرده اند و خودش برای خودش ، یک تکنیکی است.

Exception
دوشنبه 18 آذر 1387, 20:49 عصر
با سلام
دستتون درد نکنه . کدش خیلی راحت اجرا شد.

فقط یک سوالی برام باقی مونده :
البته می دونم که خواستید جواب درخواست من را مبنی بر ارائه ی یک نمونه کد کوچک با PageMethod ها بدهید . راستش این کدی که نوشتید ، می تونست با جاوااسکریپت هم پیاده سازی شود یا اصلا بدون آن. به خاطر همین ، من هنوز خیلی متوجه نشدم که این PageMethod ها ، چه کاربردی می تواند داشته باشد که خود برنامه یا جاوااسکریپت نتواند از عهده ی آن برآید.

منظور اینکه این PageMethod ها ، چه کاربردی دارد که آن را به عنوان یک تکنیک از سایر تکنیک ها مجزا کرده اند و خودش برای خودش ، یک تکنیکی است.

ساده ترین مثال اینکه ممکنه لازم باشه از دیتابیس کوئری گرفته بشه. (مثل AutoComplete)

hadi000333
سه شنبه 19 آذر 1387, 02:19 صبح
یه مثاله خیلی کاربردی :
شما در هنگام ثبت نام زمانی که کاربر از textbox نام کاربری رفع Focus میشود آنگاه مقدار TextBox رو به این متد می دهیم و در این متد چک می کنیم که آیا این نام تکراری است یا نه؟ و پیغام مناسب رو چاپ می کنی!

در Trace دیدم که سرعت خیلی بیشتری برای یه کار ساده نسبت به Update Panel داره !!!!
خاصیتش اینکه یک متد Server Side رو از طریق javascript فرا خوانی کردی
اگه تو برنامه ای که در Javascript نوشته ای نیاز گرفتن فقط یک مقدار از سمت Server برای ادامه پردازش داشته باشی خوب متوجه می شی
اگه تو برنامه هات به Java Script اهمیت نمیدی خیلی راحت بدردت نمی خوره
تا زمانی که بهش نیاز نداشته باشی خوب متوجه نمیشی
برای مثال من به یک FileUploader نیاز داشتم که Progress داشته باشه تنها راهی که به ذهنم رسید PageMethod بود چون نمیشد از Update Panel استفاده کرد.
یک نکته : اگه از ModalPopupdialog استفاده کنی طوری که نخوای کل صفحه لود بشه به شدت بهش نیاز خواهی داشت.
انشاالله
دارم یک Membership Editor می نویسم(توسعه میدم) که خیلی از این PageMethod کردم اگه تمومش کرم تو سایت میزارم تا با کاربردش آشنا بشی.

RoostaYeBekr
سه شنبه 19 آذر 1387, 16:44 عصر
با سلام
این برنامه ای که فرستادم ( با راهنمایی خوب آقای hadi000333 ) ، چک می کند که UserName کاربر تکراری نباشد . بعد از PageMethod و ScriptManager استفاده کردم.

به نظر شما چنین کاری ایراد ندارد ؟

بعد یک سوال دیگه اینکه من خودم نمی دانم که منطق این برنامه ، چگونه توسط آژاکس پیاده سازی می شود؟

دیتابیس را از پوشه App_Data بردارید.

ممنون.

RoostaYeBekr
سه شنبه 19 آذر 1387, 23:04 عصر
با سلام
شما در یک تکه از کدتان نوشته بودید:


public static string getDate()

من وقتی توی این متد می خواهم کامپوننت های سروری ام را صدا بزنم ، اصلا آنها را نمی شناسد ( منظور این که پیغام می دهد:
an object refrence is nonastatic field ,method,or property
نمی شه کاری کرد که بتونیم از کامپوننت های سروری استفاده کنیم و خطا ندهد؟

با تشکر

hadi000333
چهارشنبه 20 آذر 1387, 03:07 صبح
خوبه اما چند تا اشتباه خیلی مهم داری :
1-از متد Pageload استفاده کردی این متد رو وقتی صفحه لود میشه Ajax اجرا می کنه.!!!
2- حتما باید این امکان رو از کاربر بگیری که وقتی دکمه رو زد تا آمدن پاسخ از سمت سرور منتظر بمونه یعنی دکمه رو disable کن.!!!
3- یک چیز از همه مهمتر SQL Injection هست که رعایت نکردی!!!!

در مورد سوال آخرت توی پست های بالایی توضیح دادم
اما جایی نخوندم که راهی نداره ! اما به یک دلیل منطقی نباید بشه.
منم خیلی گشتم و نشد.

موفق باشی .

RoostaYeBekr
چهارشنبه 20 آذر 1387, 16:39 عصر
خوبه اما چند تا اشتباه خیلی مهم داری :
1-از متد Pageload استفاده کردی این متد رو وقتی صفحه لود میشه Ajax اجرا می کنه.!!!
2- حتما باید این امکان رو از کاربر بگیری که وقتی دکمه رو زد تا آمدن پاسخ از سمت سرور منتظر بمونه یعنی دکمه رو disable کن.!!!
3- یک چیز از همه مهمتر SQL Injection هست که رعایت نکردی!!!!

در مورد سوال آخرت توی پست های بالایی توضیح دادم
اما جایی نخوندم که راهی نداره ! اما به یک دلیل منطقی نباید بشه.
منم خیلی گشتم و نشد.

موفق باشی .
با سلام
گفتید :


-از متد Pageload استفاده کردی این متد رو وقتی صفحه لود میشه Ajax اجرا می کنه

آخه من که این قضیه رو سمت کلاینت رعایت کردم :


if (!(document.getElementById('TextBox1').value == ''))

گفتید:


حتما باید این امکان رو از کاربر بگیری که وقتی دکمه رو زد تا آمدن پاسخ از سمت سرور منتظر بمونه یعنی دکمه رو disable کن

چشم.
گفتید:


یک چیز از همه مهمتر SQL Injection هست که رعایت نکردی

که احتمالا منظورتون این است که باید می نوشتم :


cmd.Parameters.Add(.........);

خدا خیرتان بدهد . لطف می کنید این کدی که من در خود برنامه نوشتم :


give_Select("select _username from Table1 where _username=N'" + TextBox1_Text + "' "

رو یک جوری هکش کنید.آخه من یک بار یک تاپیک توی همین بخش ASP.NET زدم و درخواست کردم که یکی هکش کنه . کسی نتونست. به هر حال اگر شما این کار را بکنید ، ممنون می شوم.

hadi000333
چهارشنبه 20 آذر 1387, 18:37 عصر
در مورد اولی
درسته که جاوا اسکریپت در سمت کلاینت اجرا می شه اما از لحاظ برنامه نویسی مشکل داره چون هر بار که صفحه لود میشه این کد هم اجرا میشه حالا در نظر داشته باش که از طریق مستر پیج یک post back انجام بشه اونوقت این کد به طور کامل اجرا میشه .

من هکر نیستم ولی این روش برای هک خیلی ساده است. یه سرچ کن نتیجه ای گوگل میاره رو نگاه کن متوجه میشی.

اما کل اطلاعات جدولت با این دستور در TextBox پاک کردم.

'Delete Table1 --
وقتی این بخواد اجرا بشه این طوری خواهد بود:

select _username from Table1 where _username=N''Delete Table1 --'
البته شاید پیش خودت بگی طرف باید اسم جدول منو بدونه اما این کارم خیلی سخت نیست.
فکر کنم بیشتر از این توضیح نخواد.
خداحافظ