سؤال

تمام،

أعلم أنه غريب ولكن عندما أضع هذا الرمز بين <head runat="server"></head> في master.page ، هذه هي الطريقة التي تجعلها في:

 <link id="ctl00_Link1" rel="shortcut icon" href="../%3C%25%20ResolveUrl(%22~/Resources/Pictures/Shared/Misc/favicon.ico%22);%20%25%3E" type="image/x-icon" />

لا ترى شيئًا يحتاجه ASP.NET إلى العناية به.

هذا هو الكود الأصلي:

<link id="Link1" rel="shortcut icon" href='<%=ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico") %>' type="image/x-icon" runat="server" />

في الأساس ، لا يهتم ASP.NET بالرمز أدناه ويجعله HTML عادي.

كيف يمكنني التغلب على هذه المشكلة؟

شكرا لك مقدما...

تحرير وحل

حسنًا ، لا توجد طريقة للقيام بذلك. لقد اكتشفت أخيرًا لأن ResolveUrl أو selreveclienturl تعمل فقط من أجل هذه:

@import '<%= ResolveUrl("~/Resources/Styles/MainMaster/MainDesign.css") %>';
<script src='Resources/Scripts/Libraries/jquery-1.4.2.js' type="text/javascript"</script>

إنه حرفي للغاية بالنسبة للرابط ، لذا فأنت بحاجة إلى وضع عناصر الارتباط في علامة الجسم مثل:

<body>
    <link id="iconOne" rel="shortcut icon" type="image/x-icon" href="Resources/Pictures/Shared/Misc/favicon.ico"/>
    <link id="iconTwo" rel="icon" href='Resources/Pictures/Shared/Misc/favicon.ico' type="image/ico" />
</body>
هل كانت مفيدة؟

المحلول

لذا ، فإن السبب في أنك واجهت مشكلتك الأولى هو أن علامة الارتباط كانت runat="server" هذا يخبر ASP.NET بمعاملته كعنصر تحكم في الخادم ، بدلاً من ذلك كحرفي. لأنه عنصر تحكم في الخادم ، علامة البرنامج النصي (<%= %>) لا تفعل أي شيء حقًا ، نظرًا لأن خاصية التحكم في الخادم ، فإنها تعاملها كنص حرفي.

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

var link = new HtmlGenericControl("link");
link.Attributes.Add("rel", "shortcut icon");
link.Attributes.Add("src", ResolveUrl("~/Resources/Pictures/Shared/Misc/favicon.ico"));
link.Attributes.Add("type", "image/x-icon");

Header.Controls.Add(link);

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

نصائح أخرى

قد يجعل ذلك أكثر تعقيدًا مما يجب أن يكون. هل حاولت ببساطة استخدام ~ في مسار الأيقونة ، والإعداد <head runat="server">?

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

<head runat="server">
    ...
    <link rel="icon" href="~/Resources/Pictures/Shared/Misc/favicon.ico" 
        type="image/x-icon" />
    <link rel="shortcut icon" href="~/Resources/Pictures/Shared/Misc/favicon.ico"
        type="image/x-icon" />
    ...
</head>

ذات الصلة حتى الإجابة: Favicon لا تظهر

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