PDA

View Full Version : دسترسی به کنترل های html



bahar_engineer
دوشنبه 22 تیر 1388, 12:41 عصر
وقتی به جای استفاده از یک textbox از یه کنترل input از بخش تولبار html استفاده می کنم چطور می تونم تو بخش کد (codebehind) به اون دسترسی داشته باشم ؟

چیزی شبیه به این :



if(condition)
textbox1.text="some text";


اما به جای تکست باکس کنترل input از تولبار html باشه

omid_pc
دوشنبه 22 تیر 1388, 12:50 عصر
اگه بخای از سمت سرور بهش دسترسی پیدا کنی کافیه تو تعریف کنترل در قسمت سورس بنویسی

runat="server"
با جاوا اسکریپتم که می تونی رو کنترلات مانور بدی..اگه کافی نبود بگو تا بیشتر توضیح بدم.

Blue Angel
دوشنبه 22 تیر 1388, 12:54 عصر
شما نمی تونید به کنترل های html در کدتون دسترسی داشته باشید.ولی اگه نیاز دارید تا توی اونا تغییراتی بدید می تونید از JavaScript استفاده کنید.

bahar_engineer
دوشنبه 22 تیر 1388, 13:09 عصر
ببینید من یه صفحه دارم که یه پیغام درونش نمایش داده می شه تحت شرایطی

و می خوام اون پیغام فقط 15 ثانیه نمایش داده بشه و بعد از گذشت 15 ثانیه دیگه لیبل پیغامو نمایش نده

نیاز به یه تایمر داشتم که هر چی گشتم پیدا نکردم ... با آجاکس اومدم کار کنم نشد

به هر حال رو اوردم به یه کد که تایمر هست و توی جاواست. یه htmlinputtext داره که توی اون شبیه به یک تایمر از عدد 30 بصورت معکوس شمارش می شه تا 0...

کدو می ذارم اینجا لطفاً به من بگین چطور بهش دستور بدم که وقتی مقدار اون تایمر یعنی عدد توی htmlinputtext به صفر رسید دیگه لیبل من غیر فعال بشه?

این کد جاوا هستش یعنی کل کد صفحه هست ... کافیه اونو توی سورس یه صفحه جدید c# کپی کنید :



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

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>

<!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>Untitled Page</title>


</head>
<body>
<form name="counter"><input id="Text1" name="d2" style="width: 483px; color: #ff0000;" type="text" language="javascript" onclick="return Text1_onclick()" /><br />
<br />
<asp:Label ID="Label1" runat="server" Text="این پیغامی هست که باید بعد از 15 ثانیه ناپدید بشه" Width="429px"></asp:Label></form>
<script>
<!--
//


var milisec=0
var seconds=30
document.counter.d2.value='30'

function display(){
if (milisec<=0){
milisec=9
seconds-=1
}
if (seconds<=-1){
milisec=0
seconds+=1
}
else
milisec-=1
document.counter.d2.value=seconds+"."+milisec
setTimeout("display()",100)
}
display()


-->
</script>

</body>
</html>

milade
دوشنبه 22 تیر 1388, 13:49 عصر
سلام
متاسفانه راهی نیست .
چرا که سمت کلاینت به Visible دسترسی نداریم(با جاوااسکریپت منظورم هست ) .
توصیه نمیکنم هم از تایمر استفاده کنی چون پست بک داره .
بهترین راه استفاده از اینترفیس IClientCallBack هست .( فقط خواهشاً جستجو کن ، جناب استاد راد توضیح دادند )
یا استفاده از JQuery ( این یکی بهتره )
و دیگر هیچ .
موفق باشید

bahar_engineer
دوشنبه 22 تیر 1388, 14:09 عصر
با استفاده از تایمر خود .net چی system.timers.timer ؟

البته من با اون هم هرچی سعی کردم نشد

اما شاید اشتباه کرده باشم ... برای اون هم راه حلی ندارین؟

milade
دوشنبه 22 تیر 1388, 14:43 عصر
استفاده از تایمر پست بک به همراه داره .
اگه برات مشکلی نیست ازش استفاده کن .

milade
دوشنبه 22 تیر 1388, 14:45 عصر
این Sipmle هم داشته باش :

using System;
using System.Timers;

public class MiladTimer
{
private static System.Timers.Timer aTimer;

public static void Main()
{

aTimer = new System.Timers.Timer(10000);

aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

aTimer.Interval = 2000;
aTimer.Enabled = true;

Console.WriteLine("Press the Enter key to exit the program.");
}

private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}
}
نام کلاس هم عوض کن ;)

موفق باشید

bahar_engineer
دوشنبه 22 تیر 1388, 16:10 عصر
این کلاس شما که توی CONSOL هست روی وب که فکر نمی کنم جواب بده... اینطور نیست؟

اگه ویندوزی باشه که ویژوال استدیو خودش تایمر داره و خیلی هم راحته

تحت وب هیچ نوعش پیدا نمی شه

در ضمن در مورد استفاده از SYSTEM.TIMERS.TIMER اگه ممکنه یه مثال بیارین همونی که من می خوام یعنی یه لیبل داشته باشه که از صفر شروع بشه تا مثلاً 10 ثانیه و این لیبل تایمر رو نمایش بده

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

milade
دوشنبه 22 تیر 1388, 17:23 عصر
سلام دوست عزیز .
پیگیر مشکلتون شدم .
هر چند یه مدت هست Web App نیستم اما ... ( پارتی بازی )

protected System.Timers.Timer _timer;
protected void Page_Init(object sender, EventArgs e)
{
// initialize the time control
_timer = new System.Timers.Timer(5000);

// subscribe to the Elapsed event
_timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
}

protected void Page_Load(object sender, EventArgs e)
{
_timer.Start();
}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
// Do whatever you want to do on each tick of the timer
}
این رو تست کن

موفق باشید

bahar_engineer
سه شنبه 23 تیر 1388, 09:24 صبح
سلام

از لطف شما ممنون ولی اینم برای من کار نمی ده ... اصلاً چرا اینطوریه ؟من فقط به کد شما و همچنین هر کد نمونه دیگه ای که از تایمر پیدا کردم این 2 خط کد رو اضافه کردم اما هیچ وقت مقدار لیبل تغییر نمی کنه



sec += 1;
Label1.Text = sec.ToString();


این کدو تو رویداد tick و یا Elapsed گذاشتم اما هیچ وقت مقدار لیبل تغییر نمی کنه یعنی دستورات توی این رویداد اجرا نمی شن

از آجاکس هم که استفاده کردم همینطوره ... البته اون کمی بهتره چون مقدار متغیر من که sec نام داره و در بالای صفحه برابر صفر قرار گرفته ، در استفاده از تایمر آجاکس به 1 تغییر می کنه اما بیشتر از اون نه ... یعنی فقط یک بار عمل sec+=1 انجام می شه

من که سر در نمی آرم

این دیگه چه نوع تایمریه که باید هندلی عملیاتو توش انجام بدم!!! اگه تایمره خودش باید عمل جمع رو مرتب انجام بده ... نمی دونم شاید هم هر بار مقدار sec به صفر بر می گرده (چون بالای صفحه توی متغیرها اینطوری تعریفش کردم) اگه نباید این کار و بکنم پس کجا بهش مقدار اولیه بدم؟ توی لود صفحه هم که بدم هر بار صفحه رفرش می شه و مقدار sec دوباره به صفر بر می گرده ...

hobab-theme
سه شنبه 23 تیر 1388, 11:14 صبح
به نظر منم اگه از واسط IClientCallBack استفاده کنید بهتره
چون تا اونجا که من اطلاع دارم ( البته میگم که تا اونجا که من اطلاع دارم ) برای یه همچین کاری که شما میخواید انجام بدید یا باید از جاوا استفاده کنید ( که خوب آقا میلاد گفتن نمیشه ) و یا از اجاکس
در غیر این صورت شما یه پست بک خواهید داشت که فکر نمیکنم این post back به درد کار شما بخوره

milade
سه شنبه 23 تیر 1388, 11:44 صبح
این کدو تو رویداد tick و یا Elapsed گذاشتم اما هیچ وقت مقدار لیبل تغییر نمی کنه یعنی دستورات توی این رویداد اجرا نمی شن
به کد من یه بار دیگه نگاه کن
من هر 5 ثانیه می ام timer_Elapsed رو چک میکنم نه Tick رو . توی timer_Elapsed بنویس ببین چی میشه .
فعلاً نمیتونم خودم برات اجرا کنم چون Busy ام .
راستی صفحه پست بک میشه یا نه ؟

موفق باشید

milade
سه شنبه 23 تیر 1388, 11:55 صبح
یه راه حل خفن با جاوااسکریپت به ذهنم رسید که یادم رفته بودش ...
فردا تست میکنم و نتیجه رو اعلام میکنم .

موفق باشید

bahman_akbarzadeh
سه شنبه 23 تیر 1388, 12:38 عصر
اگه اشتباه نكنم، شما فقط ميخواين يك Label رو بعد از 15 ثانيه پنهان كنيد.
اين كار به راحتي با JS قابل اجراست. (شايد من مسئله رو درست متوجه نشدم، چون كسي در مورد Timer در جاوا اسكريپت صحبتي نكرد)

در ضمن AJAX رو بريزين دور (البته Microsoft AJAX). همه كارها رو يكم سخت تر ولي خيلي به صرفه تر، ميشه با جاوا اسكريپت انجام داد. (البته با JQuery تفاوت داره)

milade
سه شنبه 23 تیر 1388, 12:46 عصر
فردای پست شماره 14 ;)
تست کن :
بنویس :

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

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>

<!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>Untitled Page</title>


</head>
<body>
<form name="counter"><input id="Text1" name="d2" style="width: 483px; color: #ff0000;" type="text" language="javascript" onclick="return Text1_onclick()" /><br />
<br />
<asp:Label ID="Label1" runat="server" Text="این پیغامی هست که باید بعد از 15 ثانیه ناپدید بشه" Width="429px"></asp:Label></form>
<script>
Function Display()
{
document.getElementById('<%=label.clientid %>').style.visibility= 'hidden';
</script>

</body>
</html>
و در Load پیج بنویس :

Label.Attributes.Add("OnLoad", " setTimeout('display()',100)")
موفق باشید

aserfg
سه شنبه 13 مهر 1389, 12:11 عصر
کاری که شما می خواین انجام بدین هیچ ارتباطی به ajax نداره . شما زمانی از این تکنولوژی باید استفاده کنید که می خواهید یک round-trip انجام بدین یعنی یعدرخواست (httprequset) بفرستید و یه (httpresponse)
دریافت کنید بدون رفرش صفحه یا به عبارت دقیقتر به صورت آسنکرون. در هر حال کاری که شما می خواین انجام بدین با کدهای جاوا اسکریپت قابل حله . در مدل شیئی ارائه شده توسط جاوا اسکریپت(یه عمل cross browser هست و اکثر مرورگرها پشتیبانی می کنند) شما به سادگی می تونید با داشتن id یا name و یا type یک عنصر به اون دسترسی داشته باشید . فرق نمی کنه run at server باشه یا نه . جون زمانی که صفحه شما در حال نمایش هست همه چیز به صورت عناصر ساده html هستند .

hamhik
سه شنبه 13 مهر 1389, 12:32 عصر
فایل زیر رو دانلود کنید کاری که شما می خواید رو برای شما انجام می دهد

aserfg
سه شنبه 13 مهر 1389, 12:53 عصر
hamhik (http://www.barnamenevis.org/forum/member.php?u=12087) عزیز
کدی که شما گذاشتین درسته ولی چرا با updatepanel و ایجکس . یه نمونه که با جاوا اسکریپت این کار رو انجام دادم می زارم .
ضمنا اگر شما بخواین ده تا لیبل یا ده کامپوننت رو به همین شکل غیر فعال کنید اون وقت ده تا updatepanel می ذاشتین؟؟!!
ضمنا با jquery می شه بهش افکت هم داد .

hamhik
سه شنبه 13 مهر 1389, 13:01 عصر
حالا من یه سوال دارم مگه ما آجاکس رو استفاده نمی کنیم که کل صفحه رفرش نشه در واقع این تایمر فقط اون قسمت صفجه رو تغییر میده که ما در تگ updatepanel گذاشتیم و با بقیه ی کنترل های صفحه کاری نداره پس فکر نمی کنم کاری به بخش های دیگه ی صفحه داشته باشه.
آیا من اشتباه فکر می کنم؟