PDA

View Full Version : حرفه ای: به دست آوردن id کنترلی که روش کلیک شده در رویداد page load



myazdani
چهارشنبه 22 آذر 1391, 19:36 عصر
سلام

یه تعداد باتن دارم میخوام موقعی روش کلیک میشه تو page load (که برا postback شدن قبل از اجرای رویداد btn_click فراخوانی میشه) id اون باتن رو به دست بیارم. :متفکر:

به عبارت دیگه می خوام بدونم از بین باتن های روی صفحه ام کدوم یکی رو زدن و اینو تو page load میخوام بدونم. چون یه سری تغییرات رو می خوام تو صفحه لحاظ کنم که بستگی به id اون باتن داره.:متفکر:


ممنون میشم اگه کسی راه حلی داره بگه.

ali9698
پنج شنبه 23 آذر 1391, 01:59 صبح
من یه روش دارم نمیدونم جالب و استاندارد هست یا نه
یه hidden field بزار توی صفحه
بعد توی client click هر دکمه یه کد جاوا بنویس و مقدار اون hidden field رو عوض کن
بعد توی page_load مقدار اون رو چک کن و عملیات مورد نظر رو انجام بده
واسه تست کردن این کار بهتره که اول به جای hidden field از label استفاده کنی که متوجه تغییرات بشی

alihassanabadi
پنج شنبه 23 آذر 1391, 11:11 صبح
سلام روش اول اینکه
آی دی رو بعد از کلیک تو یه سشن ذخیره کنی و تو پیج لود اون سشن رو چکش کنی البته تو Try-catch چون بار اول سشن وجود نداره و خطا میده
و یک را بهتر اینکه نام هر کنترل که کلیک میشه میره تو Request ی به نام __EVENTTARGET
به روش عمل کن
متد زیر رو به سورس کدهای page اضافه کن


public static Control GetPostBackControl(Page page)
{
Control control = null;
string btnname = page.Request.Params.Get("__EVENTTARGET");
if (btnname != null && btnname != String.Empty)
{
control = page.FindControl(btnname);

}
else
{
foreach (string ctl in page.Request.Form)
{
Control c = page.FindControl(ctl);
if (c is System.Web.UI.WebControls.Button)
{
control = c;
break;
}
}

}
return control;
}


بعد تو پیج لود


protected void Page_Load(object sender, EventArgs e)
{
Control c = GetPostBackControl(this.Page);

if (c != null)
{
if (c.ID == "Button1")
{
Response.Write("Button1 ");
}
if (c.ID == "Button2")
{
Response.Write("Button2 ");
} if (c.ID == "Button3")
{
Response.Write("Button3 ");
}
}
}

myazdani
پنج شنبه 23 آذر 1391, 16:58 عصر
بله متشکرم

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

نمی دونم ایراد از سیستم منه یا اینکه بقیه دوستانم این مشکلو دارن؟؟:متفکر:

alihassanabadi
شنبه 25 آذر 1391, 10:22 صبح
سلام
مشکل از سیستم شماست فکر کنم Dail up استفاده میکنی
و نمیتونه سایت رو کامل لود کنه
ولی یه روش نه چندان خوب میتونی راست کلیک کنی و View Source بزنی و اون قسمت کد رو کپی بگیری:متفکر:
از مرورگر FireFox استفاده کن یا IE رو ارتقا بده

myazdani
شنبه 02 دی 1391, 01:21 صبح
ممنونم

dial up نیست ولی مرورگرم ie هست ارتقا دادم به fire fox درست شد

متشکر از راهنمایی شما

myazdani
سه شنبه 10 بهمن 1391, 17:33 عصر
دوست عزیز

وقتی این روال رو برای پیدا کردن id کنترلی که به صورت پویا ایجاد شده رو به دست بیارم کار نمی کنه.

یعنی اگه روی کنترل پویا کلیک کنه این روال فراخوانی میشه ولی null رو بر می گردونه.

مشکل چیه؟؟:متفکر:

ahmad156
چهارشنبه 11 بهمن 1391, 18:10 عصر
دوست عزیز زمانی که شما از کنترل های داینامیک استفاده میکنین در هر postback اونها از بین میرن.باید در هر Postback شما تابع ایجاد کنترل ها رو صدا بزنین جایی که قبل از page_load فراخوانی میشه (بهترین مکان برای این کار تابع LoadViewState هست )

protected override void LoadViewState(object savedState)
{}

mirahsani
چهارشنبه 11 بهمن 1391, 18:51 عصر
روش سشن که دوستمون گفتن جوابگو نیست چون buttonclick بعد از pageload اجرا میشه و شما قبل از اون آی دی رو می خواین.
---------------------------------------------------------
طراحی سایت (http://wideweb.ir/طراحی-سایت) ، سئو (http://wideweb.ir/سئو) ، هاست (http://host123.ir)

ahmad156
چهارشنبه 11 بهمن 1391, 19:06 عصر
روش سشن که دوستمون گفتن جوابگو نیست چون buttonclick بعد از pageload اجرا میشه و شما قبل از اون آی دی رو می خواین.
---------------------------------------------------------
طراحی سایت (http://wideweb.ir/طراحی-سایت) ، سئو (http://wideweb.ir/سئو) ، هاست (http://host123.ir)
دوست عزیز اگر به کنترل ID بدین و در LoadViewState شما viewstate ها رو بازیابی کنین مشکلی پیش نمیاد

myazdani
چهارشنبه 11 بهمن 1391, 19:25 عصر
دوست عزیز زمانی که شما از کنترل های داینامیک استفاده میکنین در هر postback اونها از بین میرن.باید در هر Postback شما تابع ایجاد کنترل ها رو صدا بزنین جایی که قبل از page_load فراخوانی میشه (بهترین مکان برای این کار تابع LoadViewState هست )

protected override void LoadViewState(object savedState)
{}


از همه دوستانی که تو بحث شرکت کردن ممنونم

دوست عزیز متوجه نشدم

تو این رویدادی که گفتین چی باید بنویسم؟؟ :متفکر: به دست آوردن id کنترل رو یا رویدادی که کنترلهای داینامیک رو ایجاد می کنن؟؟

اگه لطف کنین درباره پاسخ شماره 10 هم توضیح بدین ممنون میشم. چه جوری view state رو بازیابی کنم؟؟

ممنونم

ahmad156
چهارشنبه 11 بهمن 1391, 19:45 عصر
البته بازیابی viewstate ها ربطی به سوال شما نداشت :لبخندساده:.دوست عزیز تابع بالا یکی از توابع PageLifeCycle صفحه است که میتونین http://msdn.microsoft.com/en-us/library/ms178472%28v=vs.100%29.aspx (http://msdn.microsoft.com/en-us/library/ms178472%28v=vs.100%29.aspx)
مطالعه کامل انجام بدین.در هر postback تمام کنترل های داینامیک شما از بین میره پس شما باید در هر postback دوباره تابع ایجاد کنترل های داینامیک رو فراخوانی کنین و بهترین مکان برای فراخوانی تابع LoadViewState هست البته شما میتونین در Page_PreLoad هم این کار رو انجام بدین

myazdani
چهارشنبه 11 بهمن 1391, 20:15 عصر
بله ممنونم
مشکلی با ایجاد کنترلها نیست. تو page load تابع ایجاد کنترلهای داینامیک رو فراخوانی می کنم و مسئله ای از این لحاظ نیست.

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

ممنونم

Dr.Bronx
چهارشنبه 11 بهمن 1391, 20:17 عصر
چون یه سری تغییرات رو می خوام تو صفحه لحاظ کنم که بستگی به id اون باتن داره

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

اگر معمولی باشه که با js راحت میشه فهمید کدوم کلید رو کلیک کرده کاربر .

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

موفق باشید ./

ahmad156
چهارشنبه 11 بهمن 1391, 20:27 عصر
منظورتون رو متوجه نمیشم!id کدوم کنترل رو میخواین؟؟
اگه شما در زمانی که کنترل رو میسازین ID اون رو مقدار ندین خود NET. در هر postback (یا فکر کنم هر 2 postback) به صورت خودکار ID جدیدی بهش میده

myazdani
چهارشنبه 11 بهمن 1391, 20:45 عصر
id کنترل داینامیک!
خودم موقع اضافه کردن به id ش مقدار میدم!

البته حل شد

از همه دوستان ممنونم