لماذا تحتاج نماذج الويب ASP.NET إلى السمة Runat="Server"؟

StackOverflow https://stackoverflow.com/questions/304290

  •  08-07-2019
  •  | 
  •  

سؤال

لماذا لا بد لي من تحديد runat="server" على جميع عناصر تحكم ASP.NET الخاصة بي عندما تكون سمة إلزامية و server هل هو الخيار الوحيد المتاح في معرفتي المحدودة بـ ASP.NET، وأحصل على خطأ إذا لم أستخدمه؟

أدرك أنه يمكنني استخدامه بشكل اختياري على علامات HTML الخاصة بي، وأفهم نموذج العميل/الخادم وما يحدده بالفعل.

هل هي علامة زائدة عن الحاجة يمكن الإشارة إليها ضمنيًا من خلال كون عنصر التحكم أحد عناصر تحكم ASP.NET، أم أن هناك سببًا أساسيًا؟

هل كانت مفيدة؟

المحلول

ولقد اعتقدت دائما أنه كان هناك أكثر لفهم أنه يمكنك خلط علامات ASP.NET وHTML الكلمات، والكلمات HTML ديك خيار إما أن تكون runat="server" أم لا. فإنه لا يضر أي شيء لترك علامة في، ويتسبب في خطأ مترجم لإخراجها. والمزيد من الأشياء التي تدل عن لغة الويب، وأقل سهولة هو مبرمج في مهدها لتأتي في وتعلمها. هذا امر جيد كسبب مثل أي أن يكون مطول حول سمات العلامة.

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

<اقتباس فقرة>   

[...] لكن على أهمية <runat="server"> أكثر من أجل التناسق والتمدد.

     

وإذا كان المطور للاحتفال بعض العلامات (بمعنى. <asp: />) لمحرك ASP.NET تجاهل، ثم هناك أيضا مشكلة محتملة اصطدام مساحة بين العلامات والتحسينات المستقبلية. عن طريق اشتراط السمة <runat="server">، وانتفى هذا.

ويتابع:

<اقتباس فقرة>   

إذا كان مطلوبا <runat=client> لكافة العلامات العميل، سوف تحتاج إلى محلل تحليل جميع العلامات وتجريد من الجزء <runat=client>.

ويتابع:

<اقتباس فقرة>   

وحاليا،   إذا تخميني هو الصحيح، محلل   ببساطة يتجاهل كل النص (علامات أو لا   العلامات) ما لم يكن ذلك علامة مع   runat=server السمة أو "<%"   بادئة أو مباحث أمن الدولة "<!– #include ... <م> (...)   أيضا، منذ تم تصميم ASP.NET ل   يسمح الفصل بين مصممي الويب   (foo.aspx) من مطوري الويب   (foo.aspx.vb)، يمكن للمصممين ويب   استخدام الأدوات الخاصة بهم مصمم على شبكة الإنترنت ل   مكان HTML و JavaScript العميل   دون الحاجة إلى معرفة حول ASP.NET   علامات أو سمات محددة.

نصائح أخرى

وأنا عادة لا أحب أن يخمن، ولكن انا ذاهب الى واحد على هذا ...

إذا كنت تتذكر مايكروسوفت الضجيج التسويق. NET مرة في اليوم (2001؟)، كان من الصعب معرفة ما .NET حتى كان. كان الخادم؟ منصة البرمجة؟ لغة؟ شيء جديد تماما؟ ونظرا للإعلانات، وكان أي شيء غامض كنت تريد أن تكون - مجرد حل أي مشكلة قد تكون لديكم

.

وهكذا، تخميني هو أن هناك رؤية شاملة الخفية التي كود ASP.NET يمكن تشغيلها في أي مكان - جانب الخادم أو العميل، في نسخة من برنامج Internet Explorer مرتبطة وقت التشغيل .NET. RUNAT = "الخادم" هو مجرد بقايا أثرية، تركت وراءها لأنه يعادل العميل لم يصل إلى الإنتاج.

وحفظ تلك الإعلانات غريبة؟

وذات صلة: المادة من السجل مع بعض التاريخ. NET .

وليس كل الضوابط التي يمكن تضمينها في صفحة يجب يتم تشغيلها على الخادم. على سبيل المثال:

و<INPUT type="submit" runat=server />

وهذا هو أساسا نفس:

و<asp:Button runat=server />

وأزل العلامة RUNAT = الملقم من أول واحد و لديك زر HTML القياسية التي يتم تشغيلها في المتصفح. هناك أسباب وضد تشغيل تحكم معين في الملقم، وليس هناك أي وسيلة لASP.NET إلى "تحمل" ما تريد على أساس الترميز HTML قمت بتضمين. قد يكون من الممكن "استنتاج" في RUNAT = الخادم للعائلة <asp:XXX /> الضوابط، ولكن تخميني هو أن مايكروسوفت سوف نعتبر أن الإختراق إلى بناء الجملة الترميز ومحرك ASP.NET.

مقالة مايكروسوفت Msdn الضوابط المنسية:ضوابط خادم HTML يشرح استخدام runat="server" مع مثال في مربع النص <input type="text"> وذلك بتحويله إلى <input type="text" id="Textbox1" runat="server">

سيمنحك القيام بذلك وصولًا برمجيًا إلى عنصر HTML على الخادم قبل إنشاء صفحة الويب وإرسالها إلى العميل.يجب أن يحتوي عنصر HTML على سمة معرف.تعمل هذه السمة كهوية للعنصر وتمكنك من البرمجة من العناصر من خلال معرفاتها المحددة.بالإضافة إلى هذه السمة ، يجب أن يحتوي عنصر HTML على Runat = "Server".هذا يخبر خادم المعالجة بأن العلامة تتم معالجتها على الخادم ولا تعتبر عنصر HTML تقليدي.

باختصار، لتمكين الوصول البرمجي إلى إضافة عنصر HTML runat="server" إليها.

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

وعناصر HTML في ملفات ASP.NET و، افتراضيا، يعامل النص. لجعل هذه العناصر للبرمجة، إضافة سمة runat="server" إلى عنصر HTML. وتشير هذه السمة أن العنصر يجب أن تعامل على أنها عنصر تحكم ملقم.

إنه موجود لأن كافة عناصر التحكم في ASP .NET ترث من System.Web.UI.Control الذي يحتوي على السمة "runat".

في الفئة System.Web.UI.HTMLControl، السمة غير مطلوبة، ومع ذلك، في الفئة System.Web.UI.WebControl السمة مطلوبة.

يحرر:اسمح لي ان أكون أكثر تحديدا.نظرًا لأن asp.net هو إلى حد كبير مجرد ملخص لـ HTML، فإن المترجم يحتاج إلى نوع من التوجيه حتى يعرف أن العلامة المحددة تحتاج إلى التشغيل من جانب الخادم.إذا لم تكن هذه السمة موجودة فلن نتمكن من معالجتها على الخادم أولاً.إذا لم يكن هناك فإنه يفترض أنه هو العلامات العادية ويمرره إلى العميل.

وأعتقد أن مايكروسوفت يمكن إصلاح هذا الغموض من خلال جعل مترجم إضافة السمة RUNAT قبل الصفحة يتم تصنيف أي وقت مضى، ما يشبه الشيء نوع المحو أن جافا له مع الأدوية، بدلا من محو، فإنه يمكن كتابة RUNAT = الخادم أينما ترى آسيا والمحيط الهادئ: بادئة لالعلامات، وبالتالي فإن المطور لا داعي للقلق حول هذا الموضوع

إذا كنت تستخدم على علامات HTML العادية، فهذا يعني أنك يمكن التلاعب برمجيا لهم في معالجات الأحداث وما إلى ذلك، على سبيل المثال تغيير أ href أو فئة من علامة مرساة على تحميل الصفحة ... ذلك إلا إذا كان لديك، ل علامات HTML الفانيليا تذهب بشكل أسرع.

وبقدر ما تحكم المستخدم وعناصر تحكم الملقم، لا، أنها مجرد عمل متعود بدونها، دون أن يفتش في أحشاء من قبل المعالج ASPX، لا يمكن أن نقول بالضبط لماذا، ولكن الامر سيستغرق تخمين لأسباب ربما جيدة، أنها مجرد كتب محلل بهذه الطريقة، وتبحث عن أشياء تميز صراحة بأنها "القيام بشيء ما".

إذاJonSkeet حوالي أي مكان، وقال انه ربما تكون قادرة على تقديم إجابة أفضل من ذلك بكثير.

عند تقديم البيانات إلى ملقم ويب ASP.NET الضوابط المذكورة كما RUNAT = "الخادم" سيمثل ككائنات دوت نت في تطبيق الخادم. يمكنك كتابة يدويا التعليمات البرمجية في الضوابط HTML أو آخر يمكن استخدام <م> تشغيل و الخيار Server بواسطة النقر بزر الماوس الأيمن في طريقة عرض التصميم. سوف تحكم ASP.NET تلقائيا على هذه السمة بمجرد سحبه من الأدوات حيث عادة الضوابط HTML لا.

وسمة زائدة جدا، والنظر في "آسيا والمحيط الهادئ" علامة من الواضح عنصر ASP وينبغي أن يكون كافيا للتعرف عليها باعتبارها عنصرا للوصول جانب الملقم.

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

ولقد عدت للتو إلى هذا الاستنتاج عن طريق التجربة والخطأ: وهناك حاجة RUNAT = "الخادم" للوصول إلى عناصر في وقت التشغيل على الخادم. إزالتها، إعادة ترجمة ومشاهدة ما يحدث.

وrunat="Server" يشير فإن إعادة النشر إلى ملقم تحدث لHTML "السيطرة".

ونماذج ويب تستخدم postback باستمرار للإشارة إلى الخادم لمعالجة الحدث سيطرة الصفحة.

وصفحات .NET MVC لا تستخدم postback (باستثناء "submit" النموذج). تعتمد MVC على JQUERY لإدارة الصفحة على جانب العميل (وبالتالي تجاوز الحاجة إلى وجود الكثير من الرسائل postback إلى الخادم).

وهكذا: نماذج ويب .NET ... استخدام "runat" السمة كثيرا في ترميز الصفحة.

و.NET MVC بالكاد يستخدم أي وقت مضى السمة "runat" في ترميز الصفحة.

وآمل أن يساعد هذا توضيح لماذا runat هو ضروري ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top