PDA

View Full Version : مکانیزم کار صفحات Asp.net (کمک از اساتید و با تجربه ها)



aminghaderi
جمعه 12 شهریور 1389, 22:13 عصر
یا سلام ارادت خدمت استادان و دوستان گرامی.

من متاسفانه با مفهوم بنیادی مکانیزم صفحات Asp.net مشکل دارم ، می خواستم راهنمایی فرمایید که مثلا چطور یه رویداد مربوط به دکمه باتن در صفحه به سرور ارسال می شه و از سمت سرور با اینکه صفحات متعددی اونجا وجود داره ولی Asp.Net رویداد مربوطه رو اجرا می کنه و بعد پست می کنه؟!
می دونم یه کد گزاری و کد کشایی این وسط برای کشف منبع رویداد انجام می شه ولی دقیق نمی دونم چطور؟؟؟
و اینکه چطور می توان این مکانیزم و ما (برنامه نویس) اداره کند؟؟؟؟
چطور می توان بعد کلیک بروی Button ارسال ، ما درخاست رو به یه کلاس یا یه کد فایل دیگر بفرستیم؟؟؟؟؟؟؟؟؟

ممنون از راهنمایتان.:قلب:

Saman Hashemi
جمعه 12 شهریور 1389, 22:26 عصر
یا سلام ارادت خدمت استادان و دوستان گرامی.

من متاسفانه با مفهوم بنیادی مکانیزم صفحات ASP.NET مشکل دارم ، می خواستم راهنمایی فرمایید که مثلا چطور یه رویداد مربوط به دکمه باتن در صفحه به سرور ارسال می شه و از سمت سرور با اینکه صفحات متعددی اونجا وجود داره ولی ASP.NET رویداد مربوطه رو اجرا می کنه و بعد پست می کنه؟!
می دونم یه کد گزاری و کد کشایی این وسط برای کشف منبع رویداد انجام می شه ولی دقیق نمی دونم چطور؟؟؟
و اینکه چطور می توان این مکانیزم و ما (برنامه نویس) اداره کند؟؟؟؟
چطور می توان بعد کلیک بروی Button ارسال ، ما درخاست رو به یه کلاس یا یه کد فایل دیگر بفرستیم؟؟؟؟؟؟؟؟؟

ممنون از راهنمایتان.:قلب:
جواب سوال دقیق نمی دونم اما فکر با دست بردن در header بشه فایل کد عوض کرد:متفکر:


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

aminghaderi
جمعه 12 شهریور 1389, 22:45 عصر
جواب سوال دقیق نمی دونم اما فکر با دست بردن در header بشه فایل کد عوض کرد:متفکر:ممنون عزیزم از جوابت ولی شاید من منظورم رو بد بیان کردم ، منظورم این بوده که مثلا ما 4 تا Button داریم ، می خوایم هر کدوم به یه فایل کد ارجاع داشته باشه و باز به همین صفحه برگرده ؟! این جا مشکلم هست که ایا امکانی برای مدیریت توسط خود برنامه نویس هست؟؟؟؟

aminghaderi
جمعه 12 شهریور 1389, 22:52 عصر
جواب سوال دقیق نمی دونم اما فکر با دست بردن در header بشه فایل کد عوض کرد:متفکر:


<%@ Page Language="C#‎" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>


خوب با همین هم که شما بهش اشاره کردید ، می شود تا یه جاهایی جلو رفت ، به نظرتان امکان تغییر CodeFile از قسمت کد (نه دیزاین) هست؟؟؟

یعنی گزینه ای هست مثل این:

form1.codeFile="b.aspx.cs"

Alireza_Salehi
جمعه 12 شهریور 1389, 23:22 عصر
codeFile مشخص می کند که کدهای سی شارپ یا وی بی شما که برای صفحه تان نوشته اید در چه فایلی قرار دارد، که در زمان کامپایل رویداد ها و .. به متدهای مورد نظر مرتبط شود.

روشی که در ASP.NET برای مدیریت رویداد ها به این جهت است که شیوه توسعه برنامه های وب مانند ویندوز راحت گردد. شما دکمه ها را روی فرم می گذارید و برای رویداد های آن کد می ویسید، اما در هنگام اجرا دکمه ها به تگ های input و فرخوانی رویداد ها به کد های جاوااسکریپت تبدیل می شوند.
در واقع فرمان کلیک از طریق یک کد جاوااسکریپت که به صورت خودکار تولید می شود انجام می گیرد.


شما بهتر است توضیح دهید چه کاری می خواهید انجام دهید تا روش ارسال درخواست بدون استفاد هاز رویدادهای مرسوم را برایتان توضیح دهیم. در واقع بهترن راه برای منظور شما را معرفی کنیم. سوال شما خیلی کلی است.

aminghaderi
جمعه 12 شهریور 1389, 23:40 عصر
شما بهتر است توضیح دهید چه کاری می خواهید انجام دهیدممنون استاد .
من می خوام یه صفحه داشته باشم که چندین قسمت داشته باشه ، و هر قسمت از یه ادرسی (url) فراخانی شده بشود و احتمال قوی هر صفحه چندین کنترل دارید و می خواهم این کنترل ها را اداره کنم ، عکس ضمیمه شد.

هر button در اینجا به یه صفحه a.aspx - b.asp - c.aspx اشاره داره و هر کدوم باید به رویداد خودش در اون صفحات برگرده ، حالا دقیق نمی دونم چکار باید اجام دهم ؟!
برای قسمت هایی که باید نمایش داده شود هم دقیق نمی دانم چکار کنم ؟!:گیج:
از یوزر کنترل استفاده کنم ، از PlaceHolder استفاده کنم ، پویا داخل مقدار بریزم ؟؟!!؟!؟!؟؟!؟!
این مورد هم اگر راهنمایی کنید ، ممنون.

Alireza_Salehi
شنبه 13 شهریور 1389, 14:56 عصر
چرا از چند URL جدا باید فراخوانی شود؟

aminghaderi
شنبه 13 شهریور 1389, 16:23 عصر
چرا از چند URL جدا باید فراخوانی شود؟
مکانیزم برنامه این طوره ، که اطلاعات باید از3 تا پیچ داخلی خونده بشه.
مثلا :
mysite.com/a.aspx
mysite.com/b.aspx
mysite.com/c.aspx

بعد داخل یه پیچ مثلا :
mysite.com/box.aspx
باز بشه ؟!
این کار ور توسط یوزر کنترل تقریبا می تونم اجرایی کنم (هنوز کامل تسط نکردم) ولی می خواستم به صورت innerHtml کد های asp.net رو به فرم اظافه کنم ، می دونم طزریق المنت های asp از سمت سرور بی منطق و بی نتیجه هست و برای همین می خواهم اطلاعات کامل درباره ارتباطات asp.net با پرتکل http رو بدونم و اینکه خودم این مدیریت داده ها (المنت ها + داده ها) رو مدیریت کنم.
توسط Ajax به این کار مسلط هستم (گرچه کار پیچیده وسختی هست:کف:).
ولی در حالت معمولی (روش asp.net) متاسفانه ، خیر....

milade
شنبه 13 شهریور 1389, 18:46 عصر
و ماکروسافت Class و NameSpace را افرید !

عزیز من نمیدونم چرا میخوای 3 تا صفحه بسازی و اگر این ها رو جای دیگه احتیاج داری چرا یوزر کنترل استفاده نمیکنی ، اما طرز کار صفحات Asp.net این هست که Request میره سرور ، سرور اون پیج رو کامپایل میکنه و تمامی متدها رو به شکل جاوااسکریپت و ... لود میکنه . در هر PostBack هم با توجه به حالت صفحه جواب رو میده ...
هر کنترل که تعریف میشه یه سری خاصیت سمت سروری داره ،Load , Unload , Click , PreLoad نمونه ای از اونهاست که با توجه به وضعیت صفحه میتونیم توی پست بک و لود اولیه ازشون استفاده کنیم .

Alireza_Salehi
شنبه 13 شهریور 1389, 20:07 عصر
شاید من یه کم دیر میگیرم، ولی هنوز نگرفتم قضیه از چه قراره! یا من بلد نیستم یا شما خوب توضیح نمیدی!

iman_ad
شنبه 13 شهریور 1389, 20:35 عصر
عزیز دل برادر یک درخواست به 2 صورت از سرور صورت می گیره HTTP GET و HTTP POST اولی اولین درخواست و دومی باعث پست بک می شه، وقتی درخواست صورت گرفت با توجه به پسوند صفحه درخواست از IIS به Web App ارجا داده می شه و برای وب فرم ها مسولیت پاسخ به اون یک HTTP Handeler به نام Page Factory به عهده می گیره یک نمونه از کلاس page ساخته می شه و بعد از اجرای Event های مربوط به اون Method render صفحه اجرا و محتوای render شده که همون سورس صفحه ای که سمت کاربر می بینه به صورت response تحویل جناب کاربر می شه و صفحه وارد فاز Clean up می شه. و در حقیقت مرگ نمونه کلاس page اتفاق می افته.
برای جزییات می تونی تو گوگل جستجو کنی Page Life Cycle

aminghaderi
شنبه 13 شهریور 1389, 22:50 عصر
عذر خواهی می کنم ، بعضی اوقات این قسمت "تاپیک های مشترک شده" بعضی از تاپیک هایی که مطلب جدید دارند رو نشون نمی ده ، برا همین دیر متوجه پاسخ دوستان شدم ...
واسه همین مجبور شدم چنیدن بار این پست رو ادیت کنم.


و ماکروسافت Class و NameSpace را افرید !
عزیز من نمیدونم چرا میخوای 3 تا صفحه بسازی و اگر این ها رو جای دیگه احتیاج داری چرا یوزر کنترل استفاده نمیکنی ، اما طرز کار صفحات ASP.NET این هست که Request میره سرور ، سرور اون پیج رو کامپایل میکنه و تمامی متدها رو به شکل جاوااسکریپت و ... لود میکنه . در هر PostBack هم با توجه به حالت صفحه جواب رو میده ...
هر کنترل که تعریف میشه یه سری خاصیت سمت سروری داره ،Load , Unload , Click , PreLoad نمونه ای از اونهاست که با توجه به

شاید من یه کم دیر میگیرم، ولی هنوز نگرفتم قضیه از چه قراره! یا من بلد نیستم یا شما خوب توضیح نمیدی!
قطعا من بد توضیح میدم .


عزیز دل برادر یک درخواست به 2 صورت از سرور صورت می گیره HTTP GET و HTTP POST اولی اولین درخواست و دومی باعث پست بک می شه، وقتی درخواست صورت گرفت با توجه به پسوند صفحه درخواست از IIS به Web App ارجا داده می شه و برای وب فرم ها مسولیت پاسخ به اون یک HTTP Handeler به نام Page Factory به عهده می گیره یک نمونه از کلاس page ساخته می شه و بعد از اجرای Event های مربوط به اون Method render صفحه اجرا و محتوای render شده که همون سورس صفحه ای که سمت کاربر می بینه به صورت response تحویل جناب کاربر می شه و صفحه وارد فاز Clean up می شه. و در حقیقت مرگ نمونه کلاس page اتفاق می افته.
برای جزییات می تونی تو گوگل جستجو کنی Page Life Cycle
بله.... ، چشم حتمی یه Research جامع انجام می دم، همان قدر که قضیه روشن شد ، واسه من عالیه ...

ممنون از توضیحاتون ، مشکل کنجکاوی زیاده منه ؟!:لبخند:

سوال من دقیق همینه :


درخواست به 2 صورت از سرور صورت می گیره HTTP GET و HTTP POST اولی اولین درخواست و دومی باعث پست بک می شه، وقتی درخواست صورت گرفت با توجه به پسوند صفحه درخواست از IIS به Web App ارجا داده می شه و برای وب فرم ها مسولیت پاسخ به اون یک HTTP Handeler به نام Page Factory به عهده می گیره یک نمونه از کلاس page ساخته می شه و بعد از اجرای Event های مربوط به اون Method render صفحه اجرا و محتوای render شده که همون سورس صفحه ای که سمت کاربر می بینه به صورت response تحویل جناب کاربر می شه و صفحه وارد فاز Clean up می شه. و در حقیقت مرگ نمونه کلاس page اتفاق می افته
جواب سوالاتم همه در دل HTTP Handeler و Page Factory نهفته هست و همچنین این پاراگراف :

یک نمونه از کلاس page ساخته می شه و بعد از اجرای Event های مربوط به اون Method render صفحه اجرا و محتوای render شده که همون سورس صفحه ای که سمت کاربر می بینه به صورت response تحویل جناب کاربر می شه

Alireza_Salehi
یک شنبه 14 شهریور 1389, 03:33 صبح
ارتباط این متدهای HTTP که دوستمون فرمودند رو شما با اون عکسی که گذاشتی مشخص کن؟ این چه کاریه که در یک صفحه نمیشه هندل کرد و حتما باید از چند صفحه در یک صفحه لود بشه؟

اصولا ASP.NET ساخته شده که کارها راحت تر انجام بشه، در مواقعی هم که قرار باشه بدون PostBack کاری انجام بشه معمولا از یکی از سه مورد زیر(بسته به شرایط و نیازها)
XMLHttp
Page Method
Client Callback
با ترکیب (در صورت لزوم) یکی از موارد زیر
ASPX Page
HTTP Handler
استفاده میشه.
تازه بدون موارد فوق هم میتونی خودت متد های GET و POST رو با جاوااسکریپت شبیه سازی کنی و پاسخ سرور رو تحلیل کنی!

حالا هیچ کدوم اینها کارت رو راه نمیندازه؟ و می خوای Page Factory رو دستکاری کنی؟

aserfg
یک شنبه 14 شهریور 1389, 09:03 صبح
فرمایش دو دوست عزیز کاملا متین ، اما مشکل ایشون نحوه فراخوانی یک متد برای هندل کردن یک رویداده .

با سلام
مسئله ای که شما مطرح نمودین . به هیچ عنوان یک کار منطقی نیست . البته مشکل شما همون طور که خودتو ن در پست شماره 1 فرمودین (من متاسفانه با مفهوم بنیادی مکانیزم صفحات ASP.NET مشکل دارم )
عدم آشنایی کامل با مفاهیم شی گرایی است . کارهایی که شما می خواین انجام بشه رو در یک کلاس و یک متد بنویسین .
کلاس رو به دو شکل می تونین استفاده کنید :
الف - با namespace در این حالت شکل کلاستون مثل :

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using DataSet1TableAdapters;
using System.Data.SqlClient;


namespace dataset{

public class execute
{
public ststic نوع بازگشتی نام متد(پارامترها)

}
{
{
حالا دیگه برای هندل کردن هر رویدادی و تو هر صفحه ای می تونی با آوردن فضای نام .نام کلاس. نام متد(پارامترها) به این متد دسترسی داشته باشی.
ب) تعریف کلاس به صورت شی



[System.ComponentModel.DataObject]

public class articlecl
{
public نوع بازگشتی نام متد(پارامترها)
}
{
{
نکته : در اینجا از static استفاده نشد .
برای استفاده از متد های درون کلاس یک نمونه از اون ایجاد می کنیم .articlecl مثثلا نام کلاسمونه.


articlecl nemune=new articlecl();
articlecl.metods name();

اگه اطلاعاتی بیشتری راجع به فضای نام وcodebehind می خوای این آدرس روببین :
http://persianarticle.org/article.aspx?id=25&idauthore=1

aminghaderi
یک شنبه 14 شهریور 1389, 12:27 عصر
از aserfg (http://barnamenevis.org/forum/member.php?u=46835) عزیز هم ممنونم ولی ، با شی گرایی مشکل ندارم با ارتباطات مشکل دارم (نحوه دریافت و ارسال المنت ها + رویدادها + متغیر ها در asp.net مشکل دارم.)


ارتباط این متدهای HTTP که دوستمون فرمودند رو شما با اون عکسی که گذاشتی مشخص کن؟ این چه کاریه که در یک صفحه نمیشه هندل کرد و حتما باید از چند صفحه در یک صفحه لود بشه؟

اصولا ASP.NET ساخته شده که کارها راحت تر انجام بشه، در مواقعی هم که قرار باشه بدون PostBack کاری انجام بشه معمولا از یکی از سه مورد زیر(بسته به شرایط و نیازها)
XMLHttp
Page Method
Client Callback
با ترکیب (در صورت لزوم) یکی از موارد زیر
ASPX Page
HTTP Handler
استفاده میشه.
تازه بدون موارد فوق هم میتونی خودت متد های GET و POST رو با جاوااسکریپت شبیه سازی کنی و پاسخ سرور رو تحلیل کنی!

حالا هیچ کدوم اینها کارت رو راه نمیندازه؟ و می خوای Page Factory رو دستکاری کنی؟
اون دستکاری pageFactoy که انشاالله روی فرست انجامش می دم:لبخند:
ولی درسته الان شاید از متد GET و POST باید استفاده کنم.
اما استاد چطوری از اینها استفاده کنم؟؟؟
چطوری مثلا برای یه باتن در صفحه اصلیم ، تعریف کنم وقت روش کلیک شد و به سرور رفت اونجا صفحه b.aspx رو به عنوان صفحه مرجع در نظر بگیره و مثلا یه رویدادی رو اجرا کنه؟؟ (یه تابعی که تعریف کردیم.)

ممنون از اینکه وقت می گذارید.

Alireza_Salehi
یک شنبه 14 شهریور 1389, 13:08 عصر
واسه چی می خوای با کلیک بر دکمه ای در صفحه a رویدادی در صفحه b اجرا بشه؟
این جمله که به عنوان صفحه مرجع بگیره و ... رو من نمی فهمم،

شما برای اجرای یک متد در جایی خارج از صفحه مورد نظر باید اون متد رو در یک کلاس تعریف کنید و اون کلاس رو در پوشه App_Code اضافه کنید تا در همه صفحات قابل استفاد ه باشد، و در رویداد کلیک دکمه مورد نظر می تونید کد مورد نظر رو فراخوانی کنید، همون طور که در پست قبلی توضیح دادند.

اگر منظورتون اینه که بدون PostBack می خواهید کدی انجام شود بحث دیگری است. همان طور که گفتم بایستی با استفاده از XMLHttp و جاوااسکریپت درخواستی به Handler یا Page مورد نظر بفرستید و سپس پاسخ دریافتی را تفسیر کنید.

این که کلیک در یک صفحه رویدادی از صفحه دیگر را اجرا کند منطقی نیست و طراحی شما اشکال دارد.

شما که آموزش جامع کار با هسته Ajax رو بلدی، بازم تو نحوه ارتباط مشکل داری!

aminghaderi
یک شنبه 14 شهریور 1389, 13:18 عصر
شما برای اجرای یک متد در جایی خارج از صفحه مورد نظر باید اون متد رو در یک کلاس تعریف کنید و اون کلاس رو در پوشه App_Code اضافه کنید تا در همه صفحات قابل استفاد ه باشد، و در رویداد کلیک دکمه مورد نظر می تونید کد مورد نظر رو فراخوانی کنید، همون طور که در پست قبلی توضیح دادند.

دقیقا همین...
چطوری باید باتن رو براش تعرف کنم به یه کلاس به سمت سرور ارجاع داشته باشه؟؟؟؟

iman_ad
یک شنبه 14 شهریور 1389, 18:30 عصر
همچین امکانی داداش من وجود نداره شما ویندوز با وب اشتباه گرفتی بعد از رندر شدن دیگه صفحه ای وجود نداره نکه اینکه از cross page استفاده کنی اونم یا باید postback url کنترلی که پست بک انجام می ده عوض کنی و یا از server.transfer استفاده کنی که اونم صفحه مبدا می تونی به هر عضو صفحه مقصد که سطح دسترسی public داره دسترسی داشته باشه.

Alireza_Salehi
یک شنبه 14 شهریور 1389, 18:32 عصر
مستقیم نمیشه، راه حلش همونهایی که گفتم:
Page Method
Client Callback
برای متد هایی که در همون صفحه هست.
و XMLHttp برای متدهایی که در یک صفحه یا هندلر دیگر قرار دارد.

شما اگر نخواهید از رویداد های سمت سرور یک دکمه استفاده کنید مجبورید از رویداد های سمت کلاینت استفاده کنید و در او ن رویداد ها با استفاده از جاوا اسکریپت یا به روش آجاکسی یا غیر اون اقدام به ارسال یا دریافت اطلاعات کنید.

مثلا یک روش ساده اینه که پارامترها رو با QueryString و از طریق XMLHttp به صفحه دوم می فرستند و بعد خروجی یا Response صفحه رو یا مستقیم استفاده می کنند یا اطلاعات داخلش رو بسته به شرایط به کار می برند.

aminghaderi
یک شنبه 14 شهریور 1389, 19:24 عصر
این طوری که جواب می دید من شک می کنم ، منظور رو درست رسونده باشم.:کف:
خود ASP.NET برای اینکه بفهمه مثلا من دکمه x رو کلیک کردم، چکار می کنه؟؟؟(این سوال من هست)
حالا می خوام اگه بشه خودم مستقیم بر این کار مدیریت کنم .
یعنی زمانیکه بروی باتن x کلیک می شه و به طور طبیعی قراره به سرور به کلاس مورد نظر برگرده....، اونجا به ان کلاس نرود و به کلاسی که من براش تعریف می کنم برود.

امید وارم منظورم رو رسونده باشم .:خجالت:

زمانیکه روی یه باتن کلیک می شه یه کار هایی صورت می گیره ؟؟ و اون موقع است که صفحه به سرور پست می شه ؟!
همین نوع آدرس دهی و نمی دونم کار هایی که انجام می شه ؟! سواله؟!
که چطوری صفحه به سرور پست میشه ؟؟؟ خوب توسط دستور get یا post .
آیا پارامتری وجود دارد که سرور متوجه می شود صفحه پست شده مربوط به کدام کلاس هست؟؟؟؟
این کار چگونه صورت می گیره؟؟؟
من نمی خوام به صورت Ajax این کار صورت بگیره ، می خوام به صورت PostBack صورت بگیره.

ارادتمند

salehbagheri
یک شنبه 14 شهریور 1389, 20:52 عصر
شما تو هر پست خودتون یه مطلب جدیدی رو مطرح میکنید که با مطلب قبلی زمین تا آسمان تفاوت داره!

واقعاً منم نفهمیدم که شما دنبال چی هستید؟ نمایش سه صفحه در یک صفحه؟ تشخیص صفحه ای که دکمه ای در آن کلیک شده؟ یا ...


این طوری که جواب می دید من شک می کنم ، منظور رو درست رسونده باشم.
خود ASP.NET برای اینکه بفهمه مثلا من دکمه x رو کلیک کردم، چکار می کنه؟؟؟(این سوال من هست)
حالا می خوام اگه بشه خودم مستقیم بر این کار مدیریت کنم .
یعنی زمانیکه بروی باتن x کلیک می شه و به طور طبیعی قراره به سرور به کلاس مورد نظر برگرده....، اونجا به ان کلاس نرود و به کلاسی که من براش تعریف می کنم برود.

خوب کافیه متد مورد نظر خودتون رو بنویسید و از طریق یک EventHandler به رویداد Button.Click اضافه کنید.

منظورتون از نمایش سه صفحه در یک صفحه که استفاده از iframe نیست؟ درسته؟

iman_ad
یک شنبه 14 شهریور 1389, 21:50 عصر
ها ها یک جوری می گی انگار asp.net کلاس بازی می کنه که کجا بره یا نره.
عزیزم همه چیز مثل یک فرم معمولی HTML انجام می شه. یک پست بک در حقیقت یک confirm form و وقتی یکی از اونت های یک کنترل مثل onchange اتفاق می افته ولی باعث پست بک نمی شه می ره داخل event Queue و در اولین پست بک اجرا می شه.

Alireza_Salehi
یک شنبه 14 شهریور 1389, 22:33 عصر
این طوری که جواب می دید من شک می کنم ، منظور رو درست رسونده باشم.:کف:
خود ASP.NET برای اینکه بفهمه مثلا من دکمه x رو کلیک کردم، چکار می کنه؟؟؟(این سوال من هست)
حالا می خوام اگه بشه خودم مستقیم بر این کار مدیریت کنم .
یعنی زمانیکه بروی باتن x کلیک می شه و به طور طبیعی قراره به سرور به کلاس مورد نظر برگرده....، اونجا به ان کلاس نرود و به کلاسی که من براش تعریف می کنم برود.

امید وارم منظورم رو رسونده باشم .:خجالت:

زمانیکه روی یه باتن کلیک می شه یه کار هایی صورت می گیره ؟؟ و اون موقع است که صفحه به سرور پست می شه ؟!
همین نوع آدرس دهی و نمی دونم کار هایی که انجام می شه ؟! سواله؟!
که چطوری صفحه به سرور پست میشه ؟؟؟ خوب توسط دستور get یا post .
آیا پارامتری وجود دارد که سرور متوجه می شود صفحه پست شده مربوط به کدام کلاس هست؟؟؟؟
این کار چگونه صورت می گیره؟؟؟
من نمی خوام به صورت Ajax این کار صورت بگیره ، می خوام به صورت PostBack صورت بگیره.

ارادتمند
هیچ پارامتر و هیچ چیز عجیبی وجود ندارد، در وب همه چیز از HTML و جاوااسکریپت تشکیل می شود، ASP.NET هم هر چند در ظاهر سعی کرده به این دو کاری نداشته باشد و سیستم طراحی برنامه را مثل Windows Form ها در نظر بگیرد ولی در نهایت همه چیز تبدیل به جاوااسکریپت و HTML می شود.

مثلا : یک دکمه روی یک فرم وب می گذاریم و برای دکمه کد می نویسیم:
این Socrce:
<%@ Page Language="C#‎‎" AutoEventWireup="true" CodeFile="TestPage.aspx.cs" Inherits="TestPage" %>

<!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>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="ButtonShowTime" runat="server" Text="Show Time" OnClick="ButtonShowTime_Click" />
<br />
<asp:Label ID="LabelTime" runat="server" Text=""></asp:Label>
</form>
</body>
</html>
این هم کد های صفحه:
using System;

public partial class TestPage : System.Web.UI.Page
{
protected void ButtonShowTime_Click(object sender, EventArgs e)
{
LabelTime.Text = DateTime.Now.ToString("hh:MM:ss ");
}
}

این هم چیزی که مرورگر می بیند:
<!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><title>

</title></head>
<body>
<form name="form1" method="post" action="TestPage.aspx" id="form1">
<div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTU2ODgwMzc3NWRkTLtZmsvWXAnqKFsD7n0SsQR9EWE =" />
</div>

<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLVuvdFAp211Y8NZkBZIes3fPXYyOJT4Fsv2itkVso=" />
</div>
<input type="submit" name="ButtonShowTime" value="Show Time" id="ButtonShowTime" />
<br />
<span id="LabelTime"></span>
</form>
</body>
</html>

مسئله خیلی واضحه Button شما به یک input از نوع submit تبدیل میشه، رفتار submit هم که در html مشخصه، id کنترل input هم که مشخصه. ASP.NET کافیه submit رو به Click نگاشت کنه.

حالا شما بیا به Button خاصیت زیر رو بده:
UseSubmitBehavior="false"
کد صفحه اینجوری میشه:


<!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><title>

</title></head>
<body>
<form name="form1" method="post" action="TestPage.aspx" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTU2ODgwMzc3NWRkTLtZmsvWXAnqKFsD7n0SsQR9EWE =" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>


<div>

<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLVuvdFAp211Y8NZkBZIes3fPXYyOJT4Fsv2itkVso=" />
</div>
<input type="button" name="ButtonShowTime" value="Show Time" onclick="javascript:__doPostBack('ButtonShowTime','')" id="ButtonShowTime" />
<br />
<span id="LabelTime"></span>
</form>
</body>
</html>

دیگه input از نوع submit نیست و POST کردن مقادیر به سرور به کمک جاوا اسکریپت انجام میشه.

یا بیا از خاصیت زیر برای Button استفاده کن:
PostBackUrl="~/About.aspx"

کد صفحه اینجوری میشه:
<!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><title>

</title></head>
<body>
<form name="form1" method="post" action="TestPage.aspx" id="form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTU2ODgwMzc3NWRkTLtZmsvWXAnqKFsD7n0SsQR9EWE =" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>


<script src="/WebResource.axd?d=NxU6Pbb7vz1UNjsQT3ovxA2&amp;t=633802 794069218315" type="text/javascript"></script>

<div>

<input type="hidden" name="__PREVIOUSPAGE" id="__PREVIOUSPAGE" value="PulD9HI53RktU0Msmq9f-w2" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWAgLVuvdFAp211Y8NZkBZIes3fPXYyOJT4Fsv2itkVso=" />
</div>
<input type="submit" name="ButtonShowTime" value="Show Time" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;ButtonShowTime&quot;, &quot;&quot;, false, &quot;&quot;, &quot;About.aspx&quot;, false, false))" id="ButtonShowTime" />
<br />
<span id="LabelTime"></span>
</form>
</body>
</html>

باز همون کد جاوا اسکریپته با کمی تغییر که به یک صفحه دیگه POST میکنه.

شما هر کاری می خوای انجام بدی بر مینای مفاهیم HTTP و HTML است و لاغیر. برو یه کم در مورد HTML مطالعه کن.
http://www.w3schools.com/tags/att_input_type.asp

یک مثال خوبش همین پرداخت آنلاینه شما کافیه یک input روی فرم با خاصیت button بذارید و در یک تابع جاوااسکریپت از طریق xmlhpp یا page Method یا Client Callback رکورد رو در دیتابیس ثبت کنید و بعد در همون تابع جاوا اسکریپت یک متغییر فرم بسازید پارامترهای بانک رو درش ایجاد کنید و بعد متد submit فرم رو ساخته شده رو صدا کنید. این میشه پرداخت آنلاین که یک دکمه کلیک میشه PostBack ی در کار نیست اطلاعات در دیتابیس ثبت میشه و صفحه به صفحه بانک POST میشه و تمام.


من واقعا نمیگیرم مشکل شما کجاست.

aminghaderi
یک شنبه 14 شهریور 1389, 23:07 عصر
من واقعا نمیگیرم مشکل شما کجاست. ممنون استاد ، مشکل حل شد ، مشکل من همین مسئله بود که توضیح دادید ، من می خواستم ببینم روش عملکرد کد های Asp (مثلا یه Button روی صفحه)چطوریی هست که با توضیحات خوبتان ، متوجه شدم ، قضیه از چه قرار است .

ممنون