2008-10-20 15 views
11

मैं एक एएसपी.NET एमवीसी वेबसाइट बना रहा हूँ। एक परियोजना में सबकुछ रखने की बजाय, मैंने एक ही समाधान में विभिन्न परियोजनाओं में वेब, मॉडल और नियंत्रक को अलग करने का निर्णय लिया है, जो कि एक-दूसरे का संदर्भ देता है।मेरे एचटीएमएल हेल्पर एक्सटेंशन क्यों काम नहीं करते हैं?

संदर्भित इस प्रकार है:

वेब --- [संदर्भ] ---> नियंत्रक --- [संदर्भ] ---> मॉडल

अब मैं जोड़ना चाहते थे HtmlHelper क्लास के लिए 2 कस्टम विधियां - उन्हें "IncludeScript" और "IncludeStyle" कहा जाता है। वे प्रत्येक एक स्ट्रिंग पैरामीटर लेते हैं, और क्रमशः एक स्क्रिप्ट या लिंक टैग उत्पन्न करते हैं।

मैंने वेब पर प्रलेखन के अनुसार एक विस्तारक वर्ग बनाया है, और दो तरीकों को लिखा है और आवेदन संकलित किया है।

अब, जब मैं Public.Master पेज में जाने (जो अपने मुख्य गुरु-पेज, और स्थानों पर जहां मैं इन तरीकों का उपयोग करना चाहते में से एक है), मैं कोड इस तरह के नीचे के रूप में दर्ज कर सकते हैं:

<%= Html.IncludeScript("\js\jquery.js") %>

इंटेलिसेन्स उठाता है और स्क्रिप्ट शामिल करता है और मुझे सिंटैक्स को ठीक दिखाता है। तो मैं उम्मीद करता हूं कि सब कुछ काम करना चाहिए।

लेकिन ऐसा नहीं है।

सब कुछ संकलित, लेकिन जैसे ही मैं आवेदन चलाने के लिए, मैं Default.aspx.cs की लाइन 14 से निम्नलिखित रन-टाइम त्रुटि मिलती है:

c:\\Projects\\PhoneReel\\PhoneReel.Web\\Views\\Shared\\Public.Master(11): error CS0117: 'System.Web.Mvc.HtmlHelper' does not contain a definition for 'IncludeScript'

यहाँ कोड की पंक्ति है कि त्रुटि पर होता है:

httpHandler.ProcessRequest(HttpContext.Current);

कोई भी विचार गलत यहाँ क्या हो रहा जा सकता है?

+0

क्या आप शामिल स्क्रिप्ट कोड और उस परियोजना में पेस्ट कर सकते हैं जिसमें यह मौजूद है? – Ramesh

उत्तर

16

यह सुनिश्चित करने के लिए जांचें कि आपके एक्सटेंशन का नामस्थान हमारे दृश्य तक पहुंच योग्य है। आप अपने दृश्य में या तो इस की जरूरत है:

<%@ Import Namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"%> 

या इस के लिए अपने वेब config नामस्थान खंड में:

<add namespace="MyRootNamespace.NamespaceForMyHtmlHelperExtensions"/> 
+1

मैंने दोनों की कोशिश की है - अभी भी कुछ भी नहीं। बीटीडब्लू, बस मामले में, मैंने इसे नई परियोजनाओं के साथ पूरी तरह से नए समाधान में करने की कोशिश की और बस अपनी फाइलें जोड़ दी, और यह * अभी भी मुझे एक ही त्रुटि दे रही है। – Jonathan

+1

यह मेरे लिए काम करता है! आपके उत्तर के लिए धन्यवाद! –

0

क्या आप सुनिश्चित हैं कि संकलक .NET Framework 3.5 पर सेट है? यह तब हुआ जब मैंने अनजाने में कंपाइलर को .NET Framework 2.0

+0

मैंने सभी 3 परियोजनाओं के लिए प्रोजेक्ट गुणों की जांच की है और वे सभी .NET Framework 3.5 पर सेट हैं। – Jonathan

1

सुनिश्चित करें कि आपके पृष्ठ में आपके एक्सटेंशन विधियों नामस्थान पर आयात निर्देश होना सुनिश्चित करें।

अन्यथा, विजुअल स्टूडियो देख सकता है लेकिन आपकी वेबसाइट सक्षम नहीं होगी।

+0

मैंने निम्नलिखित पंक्ति को Public.Master.cs: फोनरेल का उपयोग कर रखा है। वेब। स्रोत; मैं भी <% @ आयात नामस्थान = "PhoneReel.Web.Resources"%> Public.Master में निम्न पंक्ति डाल फिर भी ठीक उसी त्रुटि मिल रही है। – Jonathan

0

IncludeScript विधि में यह सुनिश्चित करें कि क्या आप बढ़ा रहे हैं System.Web.Mvc.HtmlHelper है । यह संभव है कि किसी अन्य नामस्थान में एक HTMLHelper है।

5

यदि आप का उपयोग कर रहे हैं तो दृढ़ता से विचार टाइप किए गए हैं, और आपकी एक्सटेंशन विधि HtmlHelper<object> पर विस्तार कर रही है, इसे एक्सटेंशन नहीं मिल रहा है।आपको HtmlHelper<T> का विस्तार करने के लिए एक सामान्य विस्तारक बनाना होगा।

public static string IncludeScript<T>(this HtmlHelper<T> html, string url) { 
    return "<script type=\"text/javascript\" src=\"" + url + "\"></script>"; 
} 

फिर आप अपनी विस्तारक विधि दिखाएंगे।

मुझे उम्मीद है कि इससे मदद मिलती है।

+1

यहां सही समाधान वास्तव में जेनेरिक शामिल नहीं है - किसी भी सामान्य या होने के बजाय 'इस एचटीएमएल हेल्पर एचटीएमएल' का उपयोग करें। बेशक आपको वास्तव में मॉडल प्रकार की आवश्यकता नहीं है। –

संबंधित मुद्दे