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

عرض ساعة متحركة من الخادم

مغلق
بدأه هيثم خياط في 25 يوليو 2007 · 12 رد · 2,401 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي سؤالين في الحقيقية..:

الأول: قمت بوضع Label لعرض التاريخ والوقت في صفحة ASP.NET بالشكل التالي:

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
		ServerTime.Text = Now.ToString("dd/MM/yyyy hh:mm:ss tt")
	End Sub

ولكن أريد أن تكون الساعة متحركة.. فكيف يمكن عمل ذلك بدون استخدام جافا سكربت (إن أمكن لأن لصق كود Java يلخبط التنسيق احيانا)؟

الثاني: أعمل على صفحات ASP.NET على أساس صفحتين واحدة تعرض HTML واالثانية تعرض page.aspx.vb فكيف يمكن العمل على الصفحة بدمج الكودين HTML + كود VB.NET حيث لاحظت ان معظم الشروحات تحتوي على HTML؟ (أرجو أن يكون السؤال واضح)

شكرا جزيلا مقدما..

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#2

حسنا بامكاني اجابتك بملف جافاسكريبت من عندي ولكنني أفضل أن تعطيني ما عندك (html+js) لأشرح لك على أساسهما

الموضوع بسيط فلا تقلق

#3

عزيزي..

انا كان ودي أن أقوم بكتابة كود في ملف page.aspx.vb فقط دون الحاجة الى وضع الكود في html فهل بالامكان بوضع مثل Timer في الصفحة او شيء من هذا القبيل؟

لكن اذا كان ولا بد جافا.. فأنا حاليا لم أستخدم (html+js) حتى الان. هل بالامكان المساعدة مشكورا؟

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#4

ضع الجزء التالي من الكود في أي مكان في الصفحة تريد أن تظهر الساعة :

(الوقت يأتي من السيرفر)

<script type="text/javascript">
			var currenttime = '<%=DateTime.Now.ToString()%>' 
			var montharray=new Array("January","February","March","April","May","June","July","August","September","October","November","December")
			var serverdate=new Date(currenttime)

			function padlength(what)
			{
				var output=(what.toString().length==1)? "0"+what : what
				return output
			}

			function displaytime()
			{
				serverdate.setSeconds(serverdate.getSeconds()+1)
				var datestring=montharray[serverdate.getMonth()]+" "+padlength(serverdate.getDate())+", "+serverdate.getFullYear()
				var timestring=padlength(serverdate.getHours())+":"+padlength(serverdate.getMinutes())+":"+padlength(serverdate.getSeconds())
				document.getElementById("servertime").innerHTML=datestring+" "+timestring
			}

			window.onload=function(){setInterval("displaytime()", 1000)}
		</script>
			<p><b>Current Server Time:</b> <span id="servertime"></span></p>
#5

شكرا جزيلا عزيزي Arwany

الكود مرتب .. وأسهل بكثير من الذي وجدته في البحث.. لدي طلب تعديل بسيط.. فالوقت والتاريخ يظهران بهذا الشكل حسب المثال الذي تفضلت به:

July 26, 2007 01:30:18

كيف يمكن تعديل الفورمات حتى يظهر بالصيغة التالية:

26/07/2007 01:32:45 AM

وهناك سؤال تكميلي.. ألا توجد طريقة أخرى باستخدام VB.NET بدون جافا؟

شكرا.. :)

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#6
اقتباس
كيف يمكن تعديل الفورمات حتى يظهر بالصيغة التالية:

المثال سهل جدا حيث بامكانك التعديل على كيفك فالتابع : displaytime الذي يقوم بالمهمة سهل جدا

فقط قم باستبدال اسماء الأشهر بالأرقام من المصفوفة وقم باعادة ترتيب كودك حسب (الفورمات) التي تريد.

اقتباس
وهناك سؤال تكميلي.. ألا توجد طريقة أخرى باستخدام VB.NET بدون جافا؟

أنا لم استخدم جافا هنا بل استخدمت جافاسكريبت

حسنا المهم : لا يمكنك ذلك لأنك تريد ساعة متحركة (أي تزيد عداد الثواني) فاذا هي تعمل عند Client اي المتصفح

واللغة التي يستطيع المتصفح العمل معها هي Javascript أما vb.net فهي لغة Server Side

أرجو أن تكون قد فهمت القصد

تم تعديل هذه المشاركة بواسطة Arwany في 26 يوليو 2007 في 07:29

#7

هناك طريقة حلوة ، ولكن مع استخدام الاجكس ...

أضف UpdateManger

ومن ثم أضف UpdatePanal

ضمن الـ UpdatePanal أضف Timer وغير الخاصية interval لـ 1000

الأدوات السابقة موجودة ضمن AJAX Extenions

ضع ضمن UpdatePanal ايضا label

من ثم اضف الكود التالي ، وذلك ضمن الحدث Tick التابع للأداة Timer السابقة :

Label1.Text = DataTime.Now.ToLongTimeString()

وبذلك انتهى المطلوب ، بدون استخدام الجافا سكريبت بشكل مباشر ...

ولكن المشكلة هي فقط باستخدام الأجكس ...

#8

ولكن يا أخ ستار ماذا لو كان الخادم مشغول ولم يستجب للطلب إلا بعد مدة من الزمن ؟

ماذا ستكون النتيجة ؟

النتيجة أن الساعة لن تزيد بالطريقة التي يشعر فيها المستخدم أنها ساعة

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

#9

الأخ Arwany

شكرا جزيلا على توضيحك.. الان فهمت السبب لاستخدام جافا سكربت ليعمل عند العميل

الأخ ستار

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

شكرا للجميع.

وكن ذاك الفتى إن مشى

قالوا هذا الأثر

للتواصل الفني

haitham.khaiyat@hotmail.com

#10

you will update part of a Web page at a timed interval by using three

Microsoft ASP.NET 2.0 AJAX Extensions server controls: the ScriptManager

control, the UpdatePanel control, and the Timer control. Adding these

controls to a page eliminates the need to refresh the whole page

with each postback. Only the contents of the UpdatePanel

control will be updated.

<%=DateTime.Now.ToString()%

أخي العزيز ، هذه الشيفرة ، ماذا تفعل في كودك ، غير أنك تحملها كل واحد ثانية من على السيرفر

وإلا قصدك شيء آخر ، لأنك تعمل تعديل للفاريبل كل واحد ثانية الخاصة بأخذ الوقت من السيرفر

window.onload=function(){setInterval("displaytime()", 1000)}

لأنك كيف تفعل مع برنامج يريد أن يأتي بوقت السيرفر ، مثل برنامج الدخول والأنصراف ؟

وأنت كما تعلم ، أن الأجاكس لا يعدل إلا على الأداة المطلوبة و التي هي timer اي انك لست بحاجة لعمل

PostBack للصفحة ؟

وهذه ما فعلته أنا بالضبط ، من خلال تعديل أداة التايمر الموجودة داخل UpdatePanal ، وهذه هي الفائدة

العظيمة للأجاكس .

والله ولي التوفيق ...

تم تعديل هذه المشاركة بواسطة **star** في 26 يوليو 2007 في 17:38

#11

حبيبي ستار انت قلتها ان في كل ثانية سيتم ارسال طلب للسيرفر

أنا لم أقل سيتم PostBack

أنا قلت :

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

اذا مناداه (CallBack) وهي اذا في النهاية طلب للسيرفر (صحيح؟)

بالنسبة لبرنامج يأخذ الوقت من السيرفر فاستحضار الوقت عبر Server Side هو وقت السيرفر اذا لا خوف من الكود

والأخ السائل طلب عرض الوقت على السيرفر فقط وهذا ما أردت تحقيقه

أن نأتي بالوقت الحالي ونزيده كل ثانية بثانيتها

أما في كودك فأنا في كل ثانية آتي بالوقت من السيرفر

اذا قارنا الأداء في كلتا الحالتين سنجد أن المتصفح في حالتك سيقوم بطلب الوقت من السيرفر اذا عمل CallBack لجزء (صغر أم كبر) من الصفحة

وهذا يعطي بطئ (قل أم كثر) في الأداء

أرجو أن تكون قد فهمت قصدي (مجرد رأي شخصي)

هذا والله أعلم

#12

The Timer control is a server control that embeds a JavaScript component into the Web page. The JavaScript component initiates the postback from the browser when the interval that is defined in the Interval property has elapsed. You set the properties for the Timer control in code that runs on the server and those properties are passed to the JavaScript component

.

أخي العزيز:

هي بالفعل تقوم بعمل بوست باك عند مرور الفارق الزمني ، و هذا يسبب حركة على الشبكة غير مرغوب بها ...

بالنسبة أن البوست باك حتى و لو كان لجزء بسيط من الصفحة غير مقبول ، أيضا صحيح ...

هذه تقوم بتنفيذ الحدث tick على السيرفر ...

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

أي بين تحميل الفنكشن كل واحد ثانية ، والوقت الحقيقي الذي يمضي على السيرفر ، يعني لو كان يمكن جلب وقت السيرفر

كل وقت معين من أجل عدم حصول فارق زمني ....

لأن هذا المثال مناقش من فترة ، و هو مكتوب على ما أعتقد بـ php

شكرا لك على سعة الصدر .

#13

عزيزي الأخ ستار بصراحة تفكيرك يعجبني لأنك لا تفكر (داخل الصندوق)

بالفعل هنالك مشكلة اذا حدث فارق على المدى الطويل من الوقت

ولكن هل لاحظت أن الكود الذي كتبته يقوم بتحديث الوقت من السيرفر في كل عملية طلب من السيرفر أي فعليا في كل PostBack

وخصوصا اذا تم وضعه في Master Page

بالاضافة إلى أنه يزيد عداده (كل ثانية) اذا لا خطأ بالنسبة للتوقيت على أي نوع من أنواع المعالجات (أيا كان مصنعها)

لقد قمت بتطبيقه في مواقع عديدة بدون أي مشكلة والحمد لله

وبالنسبة لفروق التوقيت كما وضحت سابقا الكود سيأخذ الوقت من السيرفر وليس (على الاطلاق) من وقت المتصفح

فلا تخف على كودك ولا تخف على عرض الصفحة.

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

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