انجام CrossPagePostback در صورت Valid بودن فرم

emad_67

Member
با سلام
من یه فرمی دارم که میخوام بعد از اینکه کاربر روی دکمه ثبت کلیک کرد و اطلاعات در سرور تایید شد، این اطلاعات به یه صفحه دیگه ارسال بشه. حالا چه جوری میشه این کار رو کرد؟
من در رویداد click دکمه اینو نوشتم ولی جواب نداد:
کد:
protected void btnSubmit_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            btnSubmit.PostBackUrl = "~/Default2.aspx";
        }
    }
برای تایید مقدار یه textbox هم از CustomValidator استفاده کردم و این تابع رو به رویداد onServerValidate متصل کردم.
کد:
public void Validate(object source, ServerValidateEventArgs args)
    {
        int num = args.Value.Length;
        args.IsValid = (num >= 6 && num <= 10);
    }
با تشکر
 

CSharpDotnet

New Member
با سلام.
شما 2 کار می تونيد بکنيد.

1- از Client Side Validation در کنترل CustomValidatotr تون استفاده کنيد.

2- اطلاعات TextBox رو در Context صفحه ذخيره کنيد و با Server.transfer به صفحه بعد بريد و اطلاعات رو بخونيد.
به صورت زير:

کد:
[SIZE=2][COLOR=#0000ff]this[/COLOR][/SIZE][SIZE=2].Context.Items[[/SIZE][SIZE=2][COLOR=#a31515]"text"[/COLOR][/SIZE][SIZE=2]] = text1.Text;[/SIZE]


که البته من روش اول رو پيشنهاد می کنم.
 

emad_67

Member
ممنون دوست عزیز
میشه در مورد روش دوم بیشتر توضیح بدی؟
اون text که داخل [] نوشتی نوع داده ای رو که میخوایم ذخیره کنیم مشخص میکنه؟ مثلا اگه من بخوام یه شی رو ذخیره کنم باید اسم کلاس اون شی رو بنویسم؟
در مورد خوندنش در صفحه دیگه هم اگه میشه توضیح بده چون من نمیدونم چه جوری بخونمش.
 

CSharpDotnet

New Member
با سلام.
روش دوم استفاده از Context صفحه است. شما ممکنه بخوايد در طول Proccess يک صفحه، از ابتدا تا انتهای آن، از يک داده يا Object خاص استفاده کنيد و آن را در تمام کلاسهای استفاده شده در صفحه داشته باشيد.
در Asp کلاسيک اين کار به راحتی قابل انجام بود به اين صورت که شما Object مورد نظرتون رو در بالای کد های صفحه تعريف می کرديد و در تمام طول کد نويسی آن صفحه که شامل یک سری Include بود، به آن Object يا Variable دسترسی داشتيد.
در Asp.net اين امر به وسيله Context قابل پياده سازی است. بدين معنی که شما به چيزی که داخل Context قرار داره در تمام UserControl ها و کلاسهای استفاده شده در يک صفحه دسترسی داريد.

خوب روش کار هم دقيقا همونطوره که بالا گفتم. Context مثل Session و ViewState است و شما می تونيد هر چيزي رو داخلش قرار بديد.
به عنوان مثال من توی پروژه های خودم يک کلاس دارم که تمام Objectهای مورد نياز رو داخلش صدا می کنم. اينجوری اگر Object ای مثل Language رو بخواهيد در صفحه و تمام UserControl های استفاده شده در آن، استفاده کنيد فقط يک شی از آن خواهيد داشت نه به تعداد serControl های موجود.

کد:
[LEFT][SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]class [/COLOR][/SIZE][SIZE=2][COLOR=#2b91af]AllObjects[/COLOR][/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#2b91af]LanguageClass[/COLOR][/SIZE][SIZE=2] Lang[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff]get[/COLOR][/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#2b91af]LanguageClass[/COLOR][/SIZE][SIZE=2] Lang;[/SIZE]
[SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#2b91af]HttpContext[/COLOR][/SIZE][SIZE=2].Current.Items[[/SIZE][SIZE=2][COLOR=#a31515]"Lang"[/COLOR][/SIZE][SIZE=2]] == [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]Lang = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#2b91af]LanguageClass[/COLOR][/SIZE][SIZE=2]();[/SIZE]
[SIZE=2][COLOR=#2b91af]HttpContext[/COLOR][/SIZE][SIZE=2].Current.Items[[/SIZE][SIZE=2][COLOR=#a31515]"Lang"[/COLOR][/SIZE][SIZE=2]] = Lang;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]else[/COLOR][/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]Lang = ([/SIZE][SIZE=2][COLOR=#2b91af]LanguageClass[/COLOR][/SIZE][SIZE=2])[/SIZE][SIZE=2][COLOR=#2b91af]HttpContext[/COLOR][/SIZE][SIZE=2].Current.Items[[/SIZE][SIZE=2][COLOR=#a31515]"Lang"[/COLOR][/SIZE][SIZE=2]];[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] Lang;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]public [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#2b91af]SiteAuthentication[/COLOR][/SIZE][SIZE=2] SiteUser[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#0000ff]get[/COLOR][/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2][COLOR=#2b91af]SiteAuthentication[/COLOR][/SIZE][SIZE=2] SUser;[/SIZE]
[SIZE=2][COLOR=#0000ff]if[/COLOR][/SIZE][SIZE=2] ([/SIZE][SIZE=2][COLOR=#2b91af]HttpContext[/COLOR][/SIZE][SIZE=2].Current.Items[[/SIZE][SIZE=2][COLOR=#a31515]"SiteUser"[/COLOR][/SIZE][SIZE=2]] == [/SIZE][SIZE=2][COLOR=#0000ff]null[/COLOR][/SIZE][SIZE=2])[/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]SUser = [/SIZE][SIZE=2][COLOR=#0000ff]new [/COLOR][/SIZE][SIZE=2][COLOR=#2b91af]SiteAuthentication[/COLOR][/SIZE][SIZE=2]();[/SIZE]
[SIZE=2][COLOR=#2b91af]HttpContext[/COLOR][/SIZE][SIZE=2].Current.Items[[/SIZE][SIZE=2][COLOR=#a31515]"SiteUser"[/COLOR][/SIZE][SIZE=2]] = SUser;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]else[/COLOR][/SIZE]
[SIZE=2]{[/SIZE]
[SIZE=2]SUser = ([/SIZE][SIZE=2][COLOR=#2b91af]SiteAuthentication[/COLOR][/SIZE][SIZE=2])[/SIZE][SIZE=2][COLOR=#2b91af]HttpContext[/COLOR][/SIZE][SIZE=2].Current.Items[[/SIZE][SIZE=2][COLOR=#a31515]"SiteUser"[/COLOR][/SIZE][SIZE=2]];[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2][COLOR=#0000ff]return[/COLOR][/SIZE][SIZE=2] SUser;[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]}[/SIZE]
[SIZE=2]}[/SIZE][/LEFT]

در مورد خواندن در صفحات ديگر هم بايد بگم Context فقط در صفحه جاری اعتبار داره و هر صفحه برای خودش Context جدا گانه ای داره.
اما چون با دستور Server.Transfer عملا صفحه مورد نظر داخل صفحه فعلی فرا خوانی می شه، شما فقط در صورتی که از Server.Transfer برای جابجایی بین صفحاتتون استفاده کنيد می تونيد از Context صفحه قبل بهره بگيريد.
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا