PDA

View Full Version : مشکل JavaScript در CodeBehind.



aidinwashere
شنبه 24 اردیبهشت 1384, 02:49 صبح
با سلام.
من نیاز دارم که محتویات iFrame خود را که یک کد JavaScript است را در CodeBehind کنترل کنم و مثلا در Database بریزم ولی اصلا نمیتونم اونجا ازش استفاده کنم (Scope نداره).
خاطرم هست کسی مشکلی شبیه این داشت ولی پیداش نکردم.
مرسی دوستان.

Farhad.B.S
شنبه 24 اردیبهشت 1384, 14:09 عصر
برای دسترسی به کنترل های html موجود :
http://www.barnamenevis.org/forum/viewtopic.php?t=25888

aidinwashere
شنبه 24 اردیبهشت 1384, 21:30 عصر
دست شما درد نکند. :wink:
ولی با FindControl هم نتونستم متغیر JavaScript رو پیدا کنم ! :(

Farhad.B.S
یک شنبه 25 اردیبهشت 1384, 01:04 صبح
قرار نیست با استفاده از FindControl متغیر جاوااسکریپت رو به دست بیارید.
در صورتی که متغیری در جاوااسکریپت تعریف کرده و میخواید در سمت سرور ازش استفاده کنید میبایست ابتدا با استفاده از جاوااسکریپت متغیر مورد نظر رو به یک htmControl نسبت بدید و سپس در سمت سرور با استفاده از FindControl به مقدار مورد نظر دست پیدا کنید.

aidinwashere
یک شنبه 25 اردیبهشت 1384, 03:27 صبح
با تشکر از جوابتون.
من حتی مثالی که زدید :

HtmlTable theTable = FindControl("YourTableId");
Response.Write(theTable.Rows[0].Cells[0].InnerText ());
رو هم دیدم ولی باز مطلب برام روشن نشد.
اگه میشه این بیسواد رو کمی بیشتر راهنمایی کنید.
با احترام.

Behrouz_Rad
یک شنبه 25 اردیبهشت 1384, 07:02 صبح
پاسخ جناب Farhad.B.S کاملا واضح هست.
مقدار متغیر را با استفاده از جاوا اسکریپت در یک HtmlControl قرار دهید.
با استفاده از روشی که ایشون اشاره کردند، (ایجاد یک ارجا به کنترل Html) مقدار متغیر را به راحتی بخونید.

aidinwashere
چهارشنبه 28 اردیبهشت 1384, 04:58 صبح
حتی با Cast کردن های مختلف هم حل نشد
آیا مثالی سراغ دارید؟

aidinwashere
چهارشنبه 28 اردیبهشت 1384, 22:11 عصر
حتی من به نوع object هم منتسبش کردم ولی باز مشکل داره.

kochol
جمعه 30 اردیبهشت 1384, 14:42 عصر
من نیاز دارم که محتویات iFrame خود

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

aidinwashere
جمعه 30 اردیبهشت 1384, 15:34 عصر
مرسی که جواب دادید ولی اگر اسم این تاپیک رو بخوانید متوجه میشوی که بحث ما اصلا سر همین Javascript است.

kochol
جمعه 30 اردیبهشت 1384, 18:12 عصر
سلام
شما باید یک کنترل html در صفحه داشته باشید و آن را سمت سرور کنید و name آن را هم برابر id قرار دهید مثلا
name="myhtml" id="myhtml"
بعد در کدهای جاوایی که در فریم هست بنویسید به عنوان مثال برای یک عکس

parent.document.IMG1.alt=c
بعد در سمت سرور برای خواندن آن بنویسید.

IMG1.alt
:kaf:

aidinwashere
جمعه 30 اردیبهشت 1384, 22:05 عصر
مرسی که جواب دادید ولی جواب نمیدهد
باید راهی باشد که از داخل Code Behind بشه اونو منتسب به او کنترل server side کرد که من چگونگی آنرا نمیدانم
اگر میشه توضیح بیشتر بدید یا مثالی بگزارید
در google که چیزی پیدا نکردم.

kochol
شنبه 31 اردیبهشت 1384, 17:52 عصر
سلام
آقا شما دقیقا بفرمایید چه کار می خواهیدبکنید مگر نمی خواهید یه متغییر را در سمت سرور بخونید

aidinwashere
یک شنبه 01 خرداد 1384, 00:25 صبح
چرا ولی جسارتا راه شما جواب نداد یا من دقیق نفهمیدم شما منظورتون چیست.

اگر میشه توضیح بیشتر بدید یا مثالی بگزارید

kochol
یک شنبه 01 خرداد 1384, 19:56 عصر
سلام
1. شما یه فریم دارید که در آن معادلاتی توسط جاوا اسکریپت انجام می دهد و در آخر این متغییر را می خواهید از درون صفحه parent توسط کد پشت صفحه بخونید.تا اینحا که درسته

2.

شما باید یک کنترل html در صفحه داشته باشید و آن را سمت سرور کنید و name آن را هم برابر id قرار دهید مثلا
name="myhtml" id="myhtml"

3.

بعد در کدهای جاوایی که در فریم هست بنویسید به عنوان مثال برای یک عکس

parent.document.IMG1.alt=c

که در اینجا سی همان متغییر مورد نظر است

4.

بعد در سمت سرور برای خواندن آن بنویسید.

IMG1.alt

لطفا هر قسمت را نفهمیدید با ذکر نام شماره بگویید و دلیل آن را هم بنویسید

من حتما باید این مشکل شما را حل کنم

خداحافظ

aidinwashere
دوشنبه 02 خرداد 1384, 03:04 صبح
مرسی که دوست دارید مشکل منو حل کنید چون واقعا گیر کردم.
در شماره 3 اصلا کنترل های سمت سرور منو پیدا نمیکنه.
میشه یه مثالی که کار میکنه رو برام در حد چند خط بنویسید؟

Behrouz_Rad
دوشنبه 02 خرداد 1384, 09:59 صبح
کاربر aidinwashere! مثل اینکه مشکل شما هنوز حل نشده.
متاسفانه به توضیحات بنده و جناب Farhad.B.S توجه نفرمودید!
همان طور که قبلا هم گفتم:

مقدار متغیر را با استفاده از جاوا اسکریپت در یک HtmlControl قرار دهید.
با ایجاد یک ارجا به کنترل Html مقدار متغیر را به راحتی بخوانید.
1) یک HtmlInputText بر روی فرم قرار بدید
2) بر روی HtmlInputText راست کلیک کرده و گزینه Run As Server Control را انتخاب کنید.
3) با استفاده از جاوا اسکریپت، یک مقدار دلخواه به HtmlInputText نسبت دهید.
مثال:


<script language="javascript">
function AssignValue() {
Form1.text1.value='Hello and Welcome';
}
</script>

4) حال با ایجاد یک ارجاء به HtmlInputText، به راحتی قادر به خواندن مقدار آن هستید.


Dim myTextBox As HtmlInputText = FindControl("text1")
Response.Write("Value is: " & myTextBox.Value.ToString())

موفق باشید.

aidinwashere
سه شنبه 03 خرداد 1384, 05:07 صبح
مرسی جناب راد ولی وقتی میخواهم این کارو بکنم:

Dim myTextBox As HtmlInputText = FindControl("text1")
میگه که کنترلی که برمیگردونه از نوع System.Web.UI.Control است که من فکر کردم شاید اینطوری حل بشه:


System.Web.UI.Control mycontrol = new Control();
که نشد و موقع کامپایل گفت این نوع cast کردن غیر مجاز است.
جسارتا یک تکه کد که تست کردید رو برام بگذارید چون شدیدا گیر کردم و یکی از قسمت های مهم پروژه است.
حتی این هم جواب نداد:


HtmlInputText ht = new HtmlInputText();
ht = (HtmlInputText)mycontrol;
متشکرم.

Behrouz_Rad
سه شنبه 03 خرداد 1384, 05:45 صبح
:confy2: :confy2: :confy2:
باور کن اون تکه کدی که واست نوشتم رو قبل از اینکه اینجا بذارم روی سیستم تست کردم.
شاید یک نکته کوچیک رو از قلم انداختی.
مثلا وقتی که HtmlInputText روی فرم میذاری، به طور پیش فرض مقدار ID نداره که خودت باید واسش تعیین کنی که من ID اش رو برابر با text1 گذاشتم.
یا شاید یادت رفته که روش راست کلیک کنی و گزینه Run As Server Control رو انتخاب کنی یا ........

aidinwashere
سه شنبه 03 خرداد 1384, 14:19 عصر
این صفحه html است:


<body MS_POSITIONING="GridLayout">
<script language="javascript">
public int a;
a=25;
Form1.Text1.value = "asdasd";
</script>
<form id="Form1" method="post" runat="server">
 <INPUT id="Text1" style="Z-INDEX: 101; LEFT: 304px; POSITION: absolute; TOP: 192px" type="text"
name="myname" runat="server">
<asp:label id="Label1" style="Z-INDEX: 102; LEFT: 336px; POSITION: absolute; TOP: 272px" runat="server">Label</asp:label>
<asp:Button id="Button1" style="Z-INDEX: 103; LEFT: 264px; POSITION: absolute; TOP: 272px" runat="server"
Text="Button"></asp:Button></form>
</body>




این صفحه Code Behindاست:

HtmlInputText ht = new HtmlInputText();
ht = FindControl("Text1");
Label1.Text = ht.Value.ToString();
این هم همان مشکلی که عرض کردم:

موقع کامپایل گفت این نوع cast کردن غیر مجاز است
در ضمن هم ID دارد.

error ای که میدهد هم این است:
J:\Inetpub\wwwroot\WebApplication5\WebForm1.aspx.c s(38): Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.HtmlControls.HtmlInputText'
که از خطی که Findcontrol دارد ایراد میگیرد. که با Cast کردن به HtmlInputText نیز حل نشد.
ریش و قیچی دست شما دوست عزیز که وقت برای من میگزارید.

kochol
سه شنبه 03 خرداد 1384, 17:06 عصر
سلام دوستان
نمی دونم من که وقتی یه کنترل را run as server می کنم با همان id که داره کار می کنم و تغییرات را می دهم و از findcontrol هم استفاده نمی کنم حالا نمی دونم در سی شارپ اینطوری است که باید از findcontrol استفاده کرد :گیج:

aidinwashere
سه شنبه 03 خرداد 1384, 23:08 عصر
بابا مشکل من دسترسی به متغیر های Clientside در Serverside است و گرنه که فرمایش درست است.
جناب راد کجایید!!
http://www.barnamenevis.org/forum/viewtopic.php?p=137094#137094

Behrouz_Rad
سه شنبه 03 خرداد 1384, 23:26 عصر
بنده فکر می کنم (به احتمال 99 درصد)، تکس باکسی که شما روی فرم گذاشتید، Web Server Control باشه نه Html Control.
از تکس باکس Html Control استفاده کنید.
در ضمن، نیاز به new کردن ندارید.
همون کد بنده کاملا جواب میده.

aidinwashere
چهارشنبه 04 خرداد 1384, 02:04 صبح
تکس باکسی که شما روی فرم گذاشتید، Web Server Control باشه نه Html Control.
نه,HtmlControl است.
شما به Error ای که میده دقت کردید؟
در کد:

HtmlInputText ht = new HtmlInputText();
ht = FindControl("Text1");

میگه:


J:\Inetpub\wwwroot\WebApplication5\WebForm1.aspx.c s(38): Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.HtmlControls.HtmlInputText'
یعنی نوعی که Findcontrol برمیگردونه از نوع System.Web.UI.Control است که شما آنرا به HtmlInputText نسبت داده اید و این را نمیتواند انجام دهد.
میشه این کد را توی vs.net بنویسید و تست کنید و برای من بگذارید؟ چون واقعا مستاصل شده ام.
متشکرم.

Farhad.B.S
چهارشنبه 04 خرداد 1384, 20:21 عصر
با یک Casting ساده قابل حله :

HtmlInputText ht;
ht = FindControl("Text1") as HtmlInputText;

aidinwashere
چهارشنبه 04 خرداد 1384, 22:40 عصر
:( :( :( :( :(
بابا گفتم که با cast نمیشه:

http://www.barnamenevis.org/forum/viewtopic.php?p=136956#136956

میگه که کنترلی که برمیگردونه از نوع System.Web.UI.Control است که من فکر کردم شاید اینطوری حل بشه:


System.Web.UI.Control mycontrol = new Control();

که نشد و موقع کامپایل گفت این نوع cast کردن غیر مجاز است.
یعنی کسی تاحالا این کارو نکرده؟

Farhad.B.S
چهارشنبه 04 خرداد 1384, 22:59 عصر
1.مطئمن شو که که در کد سمت سرور نام کنترل مورد نظر رو درست نوشتی (به حروف کوچک و بزرگ حساس است)

2.

که با Cast کردن به HtmlInputText نیز حل نشد.
چه خطایی برمیگردونه (منظورم خطای Run-Time هستش )؟

3.

یعنی کسی تاحالا این کارو نکرده؟
:) :wink: چرا ، ولی خیلی وقته مشکل از کار خود آدمه !

aidinwashere
پنج شنبه 05 خرداد 1384, 02:50 صبح
1-درست نوشتم.
2-
http://www.barnamenevis.org/forum/viewtopic.php?p=137094#137094
3-سه خط کد که دیگه این حرفا رو نداره.

Behrouz_Rad
پنج شنبه 05 خرداد 1384, 13:13 عصر
به قول شما 3 خط کد رو نوشتم.
از قسمت زیر داونلود کنید.

aidinwashere
پنج شنبه 05 خرداد 1384, 15:21 عصر
مرسی , الان تست میکنم.
:flower: :flower: :flower:

kochol
شنبه 01 مرداد 1384, 13:49 عصر
سلام
من هم به یه چنین مشکلی برخوردم
من در یک ریپیتر این را می نویسم


input type="checkbox" name='cb%# DataBinder.Eval(Container,"DataItem.GoodsID") %>'>

و در کدمم اینو می نویسم

Dim cbGoods As HtmlInputCheckBox = FindControl("cb1")
Response.Write(cbGoods.Name)

ولی خطای زیر را می گیرد لطفا من را راهنمایی کنید.
از خط دوم کدم ایراد می گیرد.

Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Farhad.B.S
یک شنبه 02 مرداد 1384, 23:40 عصر
کنترل مورد نظر باید runat=server باشه.

kochol
یک شنبه 02 مرداد 1384, 23:53 عصر
سلام
این کار را هم کردم ولی باز هم همین خطا رو می ده