سؤال

تشير بعض النصوص في ASP.NET MVC إلى أنه "لا توجد علامات خادم تشغيل"، حتى أن مقالة MSDN هذه تقول ذلك، عندما يوجد فوق هذا البيان مباشرةً مثال للتعليمات البرمجية مع علامة خادم تشغيل في عنصر HEAD:

وفي محادثات StackOverflow قرأت

تعني عناصر تحكم "حقيقة أنك تريد استخدام" Runat = Server "أنه يجب عليك القيام بتطبيق ASP.NET تقليدي.

وبالطبع في صفحة Site.Master توجد سمات خادم التشغيل في ContentPlaceHolders.

الشيء الوحيد الذي أراه غائبًا عن ASP.NET MVC فيما يتعلق بخادم التشغيل هو علامة FORM runat = "server" الموجودة في كل مكان في كل صفحة/عرض بتنسيق .aspx.

ولكن ماذا عن بقية علامات خادم التشغيل في ASP.NET MVC، ماذا يقصد الناس عندما يقولون أن ASP.NET MVC لا يحتوي على هذه العلامات؟

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

المحلول

إذا كنت تستخدم علامة runat = "server" على أي عنصر، مثل DIV، فسوف يتم عرض هذا الرمز كعنصر منفصل طريقة في الصفحة المجمعة.

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

<% foreach (var cat in cats) { %>
    <div runat="server">
         <span class="name"> <%= cat.name %> </span> is a
         <span class="breed"> <%= cat.breed %> </span>
    </div>
 <% } %>

سيفشل هذا الرمز في إخبارك ببعض الجنون 'cat' كونها خارج النطاق.في النهاية، عندما تنظر إلى الكود الذي تم إنشاؤه بالكامل، سترى أن ملف <div> تم إنشاؤها كأسلوب خاص بها بالكامل - وهو بالطبع نطاق مختلف مع عدم وجود قطط في الأفق.

العودة للحظة إلى القالب الافتراضي لتطبيق MVC:

سترى أن القالب الحالي يمنحك هذا لـ head :

<head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title><%= Html.Encode(ViewData["Title"]) %></title>
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
</head>

هذا جعلني أتساءل - إذا كنا نستخدم بناء الجملة <%= لكتابة العنوان مباشرة في ملف title العلامة - فلماذا نحتاج إلى جعلها تعمل؟

اتضح كما كنت أظن أن الكود الخلفي لـ head يبحث عن قيمة موجودة داخل علامة العنوان (والتي كان من الممكن أن يتم إخراجها هنا بواسطة <%= Html.Encode(ViewData["Title"]) %>.إذا عثر على واحدة (وهذا هو الحال بالنسبة لجميع نماذج العرض في قالب MVC)، فلن يفعل أي شيء آخر.في حالة عدم وجود عنوان (إذا كان ViewData["Title"] فارغًا أو فارغًا) فسيتم تعيينه افتراضيًا على كل ما تم تعريفه في طريقة العرض الخاصة بك بواسطة Title يصف :

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/RRMaster.Master" 
Title="View Products" AutoEventWireup="true" CodeBehind="ViewProduct.aspx.cs"
Inherits="RR_MVC.Views.Products.ViewProduct" %>

في صفحتي الرئيسية كنت سأقوم بإزالة ملف runat='server' العلامة - لأنني لا أعتقد أنني سأرغب في ملء عنوان صفحتي من طريقة العرض Title ملكية.لكنني أؤجل القيام بهذا المنشور المعلق الذي وعد به Phil حول هذا الموضوع - في حالة ما إذا أعطاني خادم runat أي شيء مفيد لـ CSS وJS الخاص بي أيضًا.

نصائح أخرى

هذا لا يعني أنه لا يمكنك استخدام runat = "server"، بل يعني أنه ليس من الضروري استخدام عناصر التحكم من جانب الخادم، بشكل عام، في MVC.إذا وجدت أنك بحاجة إلى عنصر تحكم من جانب الخادم وتعمل معه من خلال التعليمات البرمجية الموجودة خلفه، فهذا يشير إلى أن التطبيق يتجه نحو نماذج الويب.كل الأشياء التي قد تحدث عادةً في الكود الخلفي shoulo الخاص بك سيتم التعامل معها الآن في وحدة التحكم الخاصة بك أو في منطق العرض نفسه.

قرأت للتو في هذا البرنامج التعليمي:

http://www.asp.net/learn/mvc/tutorial-12-cs.aspx

أنك بحاجة إلى

<head runat="server">

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

MVC هي مجرد طبقة أعلى نماذج الويب.تتطلب عناصر التحكم في نماذج الويب المخصصة الخاصة بي أيضًا إمكانية الوصول إلى علامة الرأس من جانب الخادم لتسجيل البرنامج النصي.يتم عرض عناصر التحكم المخصصة هذه من جانب العميل ولا تستخدم أحداث حالة العرض أو جانب الخادم.ولهذا السبب يمكن استخدامها أيضًا في MVC مع محرك عرض ASPX.

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