الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

PopUp window and asp.net page

مغلق
بدأه جوليا في 7 أبريل 2007 · 25 رد · 3,480 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته ،،

مشكلتي تتلخص في الآتي ...

لدي صفحة asp.net ... >>> لإدخال بيانات ..

تحتوي على >>> FormView ...

يتواجد بها >> زر ( عند الضغط عليه )>>> يقوم بفتح نافذه مبنثقة " popup window" ...

بعد اغلاق النافذه للـ PopWindow >> يعود بقيمة و يضعها في مربع تكست للصفحة الأم ...

كما هو واضح في الصورة التالية :

post-62586-1175956081_thumb.jpg

حسنا ،،

أنا في الواقع أحاول تطبيق مثال لتمرير البارمترات عبر هاتين الصفحتين و المتواجد هنا ...

http://www.eggheadcafe.com/articles/20060117.asp

ربما قد استخدم الـ session لتمرير القيمة و لكن ...

سؤالي هو ::

كيف يمكنني الوصول لمربع النص المتواجد في الفورم فيو و اعطاءه القيمة المحددة ؟؟ من نافذة الـ popup window

هناك مثال آخر يستخدم نفس الطريقة ...على هذه الوصلة ...

http://dotnetslackers.com/community/blogs/...ild-window.aspx

.

.

.

قد يكون سؤالي بسيطا ...

و قد لا يكون ...

.. لكني انتظر تفاعلكم و اقتراحاتكم ..

، تحياتي لكم.

#2

مممممم حاولت أن افهم تحديدا سؤالك و لكن هل المشكلة في ال PopUpMenu او تقصدين الوصول لكائن معين في صفحة اخرى و هنا طبعا هي الصفحة ال Parent؟

اعتقد ان هدفك الوصول لل Parent

اولا في المثال الذي وضعتي له وصلة كل ما يلزمك هو التالي في صفحة النافذة PopUp:

string selectedValue = ParentPage.TxtVal.Text; 
Page.RegisterStartupScript("close","<script language=javascript>window.opaener.document.getElementById('txtPopResult').value = '"+selectedValue+"';self.close();</script>");

طبعا هنا ال ParentPage انا افترضتها اسم الكلاس الخاص بالصفحة التي تقوم بفتح النافذة

في ال Parent Page تقومي بتعريف خاصية Property كالتالي :

  public static string TxtVal {set; get;}

طبعا بداخل ال Set تقومي باسناد قيمة ال text box للخاصية و بالتالي يمكنك الوصول لها في الكود الذي اقتبسته لك بالأول ..

بتمنى اكون ساعدتك في توضيح الفكرة

موفقة

You can fly while you can touch the sky

#3

الحل موجود في نهاية هذه الصفحة لو تم قرائتها بالكامل

http://www.eggheadcafe.com/articles/20060117.asp

نموت وتحيا ...................فلسطين .

#4

سلام ...

الاستاذ / محمد خليل أبو صلاح ...

جميلُ وجودك هنا .. طال غيابك عن المنتدى ...

اولا : اعتذر على صيغة سؤالي المتسرعة ... ما اهدف اليه هو الوصول TextBox متواجد داخل سيرفر كنترول و هو ( FormView) ... ضمن صفحة الـ Parent.

حسنا ،

فهمت الكود الذي كتبته ،، و هو جيد جدا حتى الآن ...

الا انه هنالك مشاكل أخرى ...

1. كيف يمكنني الوصول TextBox في الـ parent ..

2. على افتراض انني قمت بحل المشكلة الأولى ... الا هنالك شيء آخر ... صفحة الـ Parent تستخدم master page ....

و يعني ذلك ... أن استخدام الـ document للوصول للـ TextBox في الصفحة الـ parent ... قد يكون أمر غير جائز ...

ارجو ان اكون قد وضعت النقاط على الحروف ..

، تحياتي ..

#5

سلام ..

الاخ الكريم / محمد الهباش ...

شكرا لتعاونك ..

سوف اقرئها بالحال ..

، تحياتي.

#6

السلام عليكم

للوصول للتكست بوكس داخل الformview استخدمي FindControl

FormView1.FindControl("textboxid").ClientID

مثال

الصفحة الالرئيسية

<script>
var win=window.open("your page")
if(win)
   win.CallBackFunction=
	   function(returnValue)
		  {document.getElementById('<%=FormView1.FindControl("textboxid").ClientID%>').value=returnValue;}
</script>

في ال popup window مثلا ضعي

<script>
 var CallBackFunction;
 function OnOk(value)
 {
   if(window.opener)
	  { 
	  var _call_back_function=window.CallBackFunction?
		  window.CallBackFunction:window.opener.PopUpWindowCallBack;	  
	  if(_call_back_function)
		{
			_call_back_function(value);
			 window.close();		  
		} 
	  }

 }
</script>

السلام عليم

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 8 أبريل 2007 في 02:54

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#7

سلام ...

الاخ / محمد الهباش

لقد قرات الحلول المقترحة ضمن مناقشة المثال للموقع الذي ذكرته ...

و كان من أحدها الوصول للـ ID عن طريق الـ استخدام الـ placeHolder ... هذا بالنسبة اذا كانت الصفحة الرئيسية هي امتداد لـ master page..

في الواقع جربت ذلك و كما حدث للمشاركين ... لم ينفع ذلك معي !

، شكرا لاهتمامك .

#8

سلام ..

المطور / محب الرسول ..

قرات الكود الذي كتبته .. و قد صعب علي فهمه .. لكن الفكرة العامة استوعبتها قليلا...

و اشكرك كثير ، لجوابك على سؤالي فيما يختص بالوصول لكنترول متواجد ضمن كنترول آخر ..

و بالفعل نجحت في الوصول للـ ID عبر هذه الطريقة ... و كانت النتيجة مطابقة للطريقة الأخرى التي تم ذكرها في المثال للوصول للـ ID ، و هي كانت كالتالي :

اجراء تنفيذ فعلي للصفحة ، و الإطلاع على الكود المصدر لها ، و من ثم الحصول على الـ ID الخاص بالمكون ...( و التي يتم فيه استخدام الـ ContentPalceHolder ..) ..

أما المشكلة ...

عند احاول الوصول لمربع النص بإستخدام الـ ID لوضع قيمه له من صفحة الـ PopUp ... يحدث خطأ .. فلا يقوم بتنفيذ الأمر ..

و قد جربت طريقة أخرى ، قد ذكرها المبرمج Haissam في الـ blog الخاص به .. و هي كالتالي ..

اقتباس

haissam said:

When using a Master page, the textbox id is generated by asp.net. that is why window.opener.document.getElementById('TextBox1').value never works. However i have found a way to enable you to set the textbox value in the parent page if it was with masterpage.

Create a hidden textbox on the popup window which will hold the id of the textbox inside the parent page. Below is the Code behind (The textbox in the parent page is called TextBox2 and the textbox on the popup window is called TextBox1)

string textboxId = TextBox2.ClientID;

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "openwindow", "<script language=javascript>var popup = window.open('Default.aspx','popup','');popup.setTimeout('if(document.getElementById(\"TextBox1\")!=null) { document.getElementById(\"TextBox1\").value = \"" + textboxId + "\";}',300);;</script>");

Now the textbox1 in the popup page contains the ID of the textbox in the parent page, and using the code below you can set it's value

Button1.Attributes.Add("onclick", "var textbox = document.getElementById('TextBox1').value;window.opener.document.getElementById(textbox).value = '123';");

HC

و هذه أيضا لم تنفع معي !! ..

لا اعلم ما هي مشكلتي ؟؟؟ مع اني بذلت جهدا كبيرا في تحويل الكود الى VB.Net ... :blink:

، تحياتي و شكرا لاقتراحاتكم .

#9

السلام عليكم

أختي الكريمة هنالك عة طرق

اما في صفحة الpopup عند الضغط على موافق ان تستدعي function موجودفي الصفحة الرئيسية

مثل في الصفحة الرئيسية

function PopUpWindowCallBack(returnValue)
{
 document.getElementById('<%=FormView1.FindControl("textboxid").ClientID%>').value=returnValue;
}

وفي صفحة الpupup عند الضغط على موافق استدعي الدالة PopUpWindowCallBack الموجودة في الصفحة الرئيسية ومرري لها القيمة المختارة

window.opener.PopUpWindowCallBack('what ever value')

او ان تعملي متغير في الصفحة الرئيسية يحتوي على ال ID للتكست بوكس

وفي الpupup window تستخدميه مثل

الصفحة الرئيسية

var TextBoxID='<%=FormView1.FindControl("textboxid").ClientID%>';

وفي صفحة الpupup للوصول المربع النص استخدمي

window.opener.document.getElementById(window.opener.TextBoxID).value='what ever'

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#10

سلام ...

المطور/ محب الرسول

:) شكرا لعودتك ، و اهتمامك بمتابعة الموضوع ..

حسنا، لقد جربت الطريقتين التي ذكرتهما ، و طرق أخرى باستخدام الـ Session ... لكن لم اصل الى تحقيق المطلوب بنجاح !

قد يكون هنالك خطأ ما اتبعته أثناء كتابة الكود لجهلا ما .

على كل حال ، اذا كان هنالك متسع من الوقت لديك ، أو للأعضاء الآخرين .. فيمكنك الاطلاع على المرفق لاكتشاف الخطأ ، ان كان هنالك خطا ما .

، تحياتي لكم .

WebSite4.rar

#11

السلام عليكم :

1. نضيف صفحتين للمشروع على سبيل المثال webform1 و popup

2> نضع في الصفحة الأولى زر و مربع نص حيث تكون المسميات على النحو التالي

btnPop بالنسبة للزر

txtReceive بالنسبة لمربع النص

نضيف الكود الببرمجي التالي

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim strTxtTransfer As String = Request.QueryString.Get("strText")

If strTxtTransfer <> "" Then

Me.txtReceive.Text = strTxtTransfer

End If

If Not IsPostBack Then

btnPop.Attributes.Add("onclick", "java script:openWindow()")

End If

End Sub

---------------------------------------------------------------

ثم ضمن html نضيف السكريبت التالي

<script language="javascript">

function openWindow()

{

msgWindow=window.open("popup.aspx","", "fullscreen=no,toolbar=no,status=yes,menubar=yes,scrollbars=no,resizable=no,directories=no,location=no,width=500,height=400");

if (msgWindow.opener == null) msgWindow.opener = self;

}

</script>

وبذلك تكون المرحلة قد انتهت

الآن صفحة popup

نضع فيها 2 كونترل الزر وأداة النص

الزر btnSendQS

وأداة النص txtPop

نضيف الكود التالي :

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

If Not IsPostBack Then

btnSendQS.Attributes.Add("onclick", "java script:transferText(txtPop.value)")

End If

End Sub

ثم نضيف كود html (java script)

<script language="javascript">

function transferText(strTxtTransfer)

{

window.opener.parent.location.href = "webform1.aspx?strText="+ strTxtTransfer;

window.close();

}

</script>

الكود السابق يفتح شاشة جديدة popup

ومن ثم من الصفحة الجديدة نرسل الجملة التي نريد للصفحة الرئيسة يلي بدأنا منها

وشكرا

#12

سلام ..

العضو الكريم / **Star**

يسرني أن تكون أول مشاركة لك في موضوعي .. :D

و لكن يؤسفني كذلك بأن أخبرك بأن طريقة حلك لم تنجح معي ..!

ربما لخطأ ما اتبعته ؟ لا أدري ..

و لكني ارفقت الحل الذي كتبته و لم يحصل معي تنفيذ لفتح نافذة البوب اب اصلا ، فكيف إذن بتمرير البارمترات .

في النهاية شكرا لك على فكرتك الجميلة .

، تحياتي لك.

ملاحظه : يمكنك مراجعة المرفق .

WebSite4.rar

#13

بسيطه ،

المشروع موجود بالرابط

بالتوفيق

popup1.rar

#14

السلام عليكم

حياك الله أختي الكريمه والعفو

أهلا وسهلا بالأخ الكريم **Star**

لا أعلم ليش بتعملوا submit عند أية action?

انا لغيت ال ال submit behavior لل buttons الغير ضرورية

WebSite4.rar

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#15

الكريم / **Star**

لقد قمت بتحميل مشروعك ، و تمت عملية التنفيذ بنجاح ..

فشكرا لك ..

في الواقع قبل مشاركتك كنت أضع السكريبت في الـ VB.net code .. و عندما حاولت وضعه في الـ asp.net code .. لم اهتدي للطريقة المناسبة لذلك ..

و لكن الآن تعلمت منك كيف يمكنني ذلك .. خاصة أنه اول سكريبت اقوم بكتابته .. أي ليست لدي اي خلفية بالجافا سكريبت ..

:D ننتظر مواضيعك عبر هذا المنتدى ! .

، تحياتي.

#16

المطور / محب الرسول

ما هذا !!! أنت معجزه !!

بكل بساطه فككت معضلتي التي طالت ليالي و أيامي !

ملاحظتك بخصوص منع إعادة تحميل الصفحة عند الضغط على زر فتح نافذة الـ popup كانت رائعة !!

و قد قرات عن ذلك بوضعه في onclientclick لكني لم أعرف الطريقة السليمة لفعل ذلك ...

و التي أيضا كانت من بين الاقتراحات بإستخدام زر يعمل بكود الـ Html عوضا عن زر يعمل بتقنية الـ asp.net..

و أيضا اهنئك على دقة ملاحظتك بخصوص استخدام الطريقة:

('//','/')url.Replace

في الواقع لقد خالجني الشك ايضا في خصوص ذلك ، لخلفيتي في لغات البرمجة الاخرى بأن الـ / من الحروف الغير مطبوعة ، و قد حاولت البحث عن ذلك ..

الا النتيجة التي توصلت كانت ضعيفه المصدر .. و لم تفي بالمطلوب..

حسنا ، بالتصحيح الأخيرالذي وفره لي المطور / محب الرسول ... >>> يكون الموضوع قد تم ايجاد حل له.

ختاما ،

اشكر كل من ساهم في البحث عن حلول لهذه المشكلة ..

الخبير / محمد خليل أبو صلاح .

العضو/ محمد الهباش.

المطور / محب الرسول.

العضو / **Star**

، تحياتي و تقديري لكم .

#17

السلام عليكم

حياك الله أختي الكريمة

بخصوص زر aspButton فهو يكون submin button تلقائيا

ولجعلة زر عادي نضع الخاصية usesubmitbehavior الى false

او في ال onclientclick دائما ترجع قيمة false مثل

<... onclientclick="whatever();return false;">

والسلام عليكم

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#18

المطور / محب الرسول

:) نعم لاحظت ذلك ،

انها لمعلومات جيدة ، فشكرا لك .

، تحياتي.

#19

الأخ المطور / محب الرسول

الأخت جوليا

السلام عليكم .....

لدي سؤال حول هذا الموضوع ، والذي أنتم أكثر دراية مني فيه , حيث أنني اردت ان أقوم بإرجاع قيمتين من الصفحة المنبثقة إلى الصفحة الرئيسية ، لكن واجهتني صعوبة في تطبيقها

		Dim url As String = TTB.Text
		Dim IDD As Integer = "2"
		InsertButton.Attributes.Add("onclick", "window.opener.PopUpWindowCallBack('" + url.Replace("\", "\\") + "');window.close();")
		InsertButton.Attributes.Add("onclick", "window.opener.PopUpWindowCallBack22('" + IDD + "');window.close();")

آمل أن تفيدونني

ولكم الشكر

اللهم صلي على محمد وعلى آله وصحابته أجميعن إلى يوم الدين

#20

سلام ..

habeab

اقتراحي أن تكون الطريقة PopUpWindowCallBack تأخذه 2 بارميتر ..

أي تكون في الـ Main Page كالتالي ...

function PopUpWindowCallBack(returnvalue1,returnvalue2){....}

و في كود الـ Popup

Dim url As String = TTB.Text  
Dim IDD As Integer = "2"		
InsertButton.Attributes.Add("onclick", "window.opener.PopUpWindowCallBack('" + url.Replace("\", "\\") + "',"+IDD+"');window.close();")

أرجو أن يكون مفيدا لك ذلك .

، تحياتي.

تم تعديل هذه المشاركة بواسطة جوليا في 15 أبريل 2007 في 15:43

#21

الاخت جوليا

شكراً على مرورك ....

فعلاً ، كان إقتراحك في مكانه وموفق .

لكن لو لا حظنا بأن القيم التي تمرر في PopUpWindowCallBack ، جميعها لا بد من نوع String .

شكراً لكي مرة أخرى ......

اللهم صلي على محمد وعلى آله وصحابته أجميعن إلى يوم الدين

#22

الاخت جوليا

شكراً على مرورك ....

فعلاً ، كان إقتراحك في كانه وموفق .

لكن لو لا حظنا بأن القيم التي تمرر في PopUpWindowCallBack ، جميعها لا بد من نوع String .

شكراً لكي مرة أخرى ......

اللهم صلي على محمد وعلى آله وصحابته أجميعن إلى يوم الدين

#23

الاخت جوليا

شكراً على مرورك ....

فعلاً ، كان إقتراحك في مكانه وموفق .

لكن لو لا حظنا بأن القيم التي تمرر في PopUpWindowCallBack ، جميعها لا بد من نوع String .

شكراً لكي مرة أخرى ......

اللهم صلي على محمد وعلى آله وصحابته أجميعن إلى يوم الدين

#24

نعم هي ستكون من نوع String لانها ستمرر ضمن ال QueryString

ولكن يمكن تحويلها مرة أخرى لرقم عن طريق

Dim int As Integer = int.Parse(strInt)  // int.Parse NOT Int.Parse
or 
using -> Convert.ToInt32(int)

أيضا لاحظت انك كتبت شيء خطأ و هو عندما قمت انت بتعريف رقم تحت اسم للمتغير IDD اسندت له قيمة نص و هي "2" و بالتالي سوف تحصل على خطأ

You can fly while you can touch the sky

#25

الأخ محمد خليل أبو صلاح

شكراً لك على مرورك ....

وفعلاً نستطيع أن نرجع القيم النصية إلى Int

وشكراً لك مرة أخرى على الملاحظة التي ذكرتها.............

أخوكم

اللهم صلي على محمد وعلى آله وصحابته أجميعن إلى يوم الدين

هذا الموضوع مغلق.

مواضيع مشابهة