سؤال

وأنا أحاول أن استخدام التوجيه المعالج في صفحة ASPX، ولكن الصفحة لا يتعرف عليه. هل هذا مجرد شيء لا أستطيع أن أفعل؟

والخلفية: أنا أحاول أن تشمل النسخة الكاملة من مسج في وضع DEBUG (ل، حسنا، التصحيح =))، والنسخة مصغر للإفراج عنه. حاولت ذلك، لكنني لست على دراية بشكل رهيب مع ASPX <جملة٪. أنا مجرد سوء فهم أساسي ما يفعله هذا النحو؟

<% #if DEBUG %>
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
<% #else %>
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<% #endif %>
هل كانت مفيدة؟

المحلول

والفرق للاهتمام هنا - باستخدام #if DEBUG في صفحة aspx تسحب من العلامة في الملف web.config، ولكن عند استخدامه في التعليمات البرمجية الخلفية، فإنه يسحب DEBUG من الثابت من تكوين بناء في ملف المشروع . حتى انهم الوصول إلى اثنين على مختلفة إعدادات الواقع.

وهكذا، بقدر ما استطيع ان اقول، وهذا غير ممكن في الواقع.

نصائح أخرى

قد يكون طريقة أفضل لاستخدام رمز جانب الملقم لتشمل النصي. فما استقاموا لكم فاستقيموا استخدام شيء من هذا القبيل

protected void Page_Load(object sender, EventArgs e)
{
#if DEBUG    
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    #else
    ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    #endif
}

للي الحل الأكثر أناقة سيكون لمجرد تعريف حقل في التعليمات البرمجية الخلفية مع توجيهات المعالج ومن ثم تحقق من قيمته من صفحة aspx.

في التعليمات البرمجية الخلفية:

public partial class WebClient : System.Web.UI.Page
{        
#if DEBUG 
    public bool DebugMode = true;
#else
    public bool DebugMode = false;
#endif
}

وصفحة aspx:

<%if(this.DebugMode){%>
    <script type="text/javascript" src="resources/jquery-1.3.2.js" />
<%}%>
<%else{%>
    <script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
<%}%>

وحاولت التعليمات البرمجية، وأنه يعمل بشكل جيد بالنسبة لي. I تمكين أو تعطيل DEBUG من قسم system.web / تجميع في الملف web.config، تشغيل وموقع على شبكة الإنترنت (لم يختبر كتطبيق ويب، قد تكون مختلفة ...).

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

وتلميح: توجيهات ما قبل المعالج <م> و إدراجها في الانتاج

Line 218:     #if DEBUG 
Line 219:              
Line 220:              #line default
Line 221:              #line hidden
Line 222:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.js\" />\r\n");
Line 223:              
Line 224:              #line 14 "F:\Test\test.aspx"
Line 225:     #else 
Line 226:              
Line 227:              #line default
Line 228:              #line hidden
Line 229:              @__w.Write("\r\n<script type=\"text/javascript\" src=\"resources/jquery-1.3.2.min.js\" />\r\n");
Line 230:              
Line 231:              #line 16 "F:\Test\test.aspx"
Line 232:     #endif

وبطبيعة الحال، هناك طرق أخرى (أفضل) لفعل ما كنت بعد ...

وحاولت تحقيق ذلك بطرق عديدة على مر السنين مع أي نجاح. بعد اللعب مع مفك asp.net مؤخرا حصلت على هذه الفكرة. وهناك احتمال آخر للحفاظ على كل شيء في صفحة aspx باستخدام أنواع MIME غير صالحة. في ASP.NET MVC، يتم تحميل القوالب مع MIME غير صالح  أنواع، بحيث لن يقوم المتصفح تحليل لهم. تابعت نفس النمط هنا. WOLA! نجاح ... أنت بحاجة الى وظيفة ثابتة واحدة والتي تمنحك سهولة الوصول إلى القيد التصحيح.

<script src='<%= Page.ResolveUrl("~/Scripts/jquery-1.5.2.min.js") %>' 
    **type='<%=if(Ops.IsRelease(),"text/javascript","HideMin")%>'**></script> 

وOps.IsRelease () هو وظيفة ثابتة العامة التي ترجع constaraint التصحيح

    Public Shared Function IsRelease() As Boolean
        Dim [release] = False
#If Not debug Then
        [release]=True
#End If
        Return [release]
    End Function

وكان لي نفس المشكلة، حاولت ايجاد حل لها في كل من asp.mvc تطبيق ويبفورم التطبيق. التصحيح #if عودة صحيحا دائما، فإنه يأخذ أبدا في الحسبان وضع تجميع الملف web.config. I حلها بطريقة مماثلة لصيام المشورة شارك في هذا المنصب، ولكن بدلا من وظيفة ثابتة يمكنني استخدام متغير astatcic كما هو موضح هنا: http://www.psworld.pl/Programming/DebugDirective

وهنا هو بلدي الحل:

protected void Page_Load(object sender, EventArgs e)
{
    if (System.Diagnostics.Debugger.IsAttached)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.js");
    }
    else
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "JQueryScript", "resources/jquery-1.3.2.min.js");
    }
}

وأنا لا أعتقد أنك يمكن أن يكون توجيهات المعالج في ASPX للأسف.

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

وعلى سبيل المثال:

ورمز امام:

<asp:literal id="litJQuery" EnableViewState="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.js" />
</asp:literal>
<asp:literal id="litJQueryDebug" EnableViewState="false" Visible="false" runat="Server">
<script type="text/javascript" src="resources/jquery-1.3.2.min.js" />
</asp:literal>

والتعليمات البرمجية الخلفية، في أسلوب Page_Load:

#if DEBUG
litJQueryDebug.Visible=true;
litJQuery.Visible=false;
#endif
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top