2013-06-06 6 views
5

में मौजूद नहीं है मेरे पास एक एमवीसी 4 प्रोजेक्ट है जिसे मैं एक सहायक बनाने की कोशिश कर रहा हूं। मैंने "App_Code" नामक एक फ़ोल्डर जोड़ा है, और उस फ़ोल्डर में मैंने MyHelpers.cshtml नामक एक फ़ाइल जोड़ा है। यहाँ कि फ़ाइल की संपूर्ण सामग्री हैं:नाम 'यूआरएल' नाम वर्तमान संदर्भ त्रुटि

@helper MakeButton(string linkText, string actionName, string controllerName, string iconName, string classes) { 
    <a href='@Url.Action(linkText,actionName,controllerName)' class="btn @classes">Primary link</a> 
} 

(मैं जानता हूँ कि कुछ अप्रयुक्त पैरामीटर देखते हैं, के बाद मैं इस तय हो मैं उन बाद में करने के लिए मिल जाएगा)

मैं "साफ" और समाधान का निर्माण , त्रुटियाँ नहीं।

सहायक पृष्ठ का उपयोग करने वाले पृष्ठ में, मैंने यह कोड जोड़ा।

@MyHelpers.MakeButton("Back","CreateOffer","Merchant","","btn-primary") 

जब मैं परियोजना को चलाने के लिए प्रयास करते हैं, मैं निम्नलिखित त्रुटि मिलती है:

Compiler Error Message: CS0103: The name 'Url' does not exist in the current context

मैं इस लिखने के लिए सही तरीका खोजने के लिए प्रतीत नहीं कर सकते हैं - क्या मैं गलत कर रहा हूँ? वेब पर देखे गए उदाहरणों की तुलना में यह सही लगता है?

+2

मुझे लगता है कि आपको ऐसा कुछ करने की ज़रूरत है: http://stackoverflow.com/questions/4710853/using-mvc-htmlhelper-extensions-from-razor-declarative-views। – JeffB

+0

क्या आप '@ Url.Action' के बजाय' @ Html.ActionLink' का उपयोग करना चाहते थे? मैंने दोनों के बारे में मेरे जवाब में एक फुटनोट लगाया है। –

उत्तर

4

जैसा कि जेफबी के लिंक से पता चलता है, आपकी सहायक फ़ाइल में UrlHelper ऑब्जेक्ट तक पहुंच नहीं है।

@helper MakeButton(string linkText, string actionName, 
    string controllerName, string iconName, string classes) { 

    System.Web.Mvc.UrlHelper urlHelper = 
     new System.Web.Mvc.UrlHelper(Request.RequestContext); 
    <a href='@urlHelper.Action(linkText,actionName,controllerName)' 
     class="btn @classes">Primary link</a> 
} 
4

मेरी सहायकों के लिए मैं एक आधार वर्ग बनाने:

using System.Web.WebPages; 
using System.Web.Mvc; 

namespace MyProject 
{ 
    public class HelperBase : HelperPage 
    { 
     public static new HtmlHelper Html 
     { 
      get { return ((WebViewPage)WebPageContext.Current.Page).Html; } 
     } 
     public static System.Web.Mvc.UrlHelper Url 
     { 
      get { return ((WebViewPage)WebPageContext.Current.Page).Url; } 
     } 
    } 
} 

और फिर मेरी सहायक में मैं (एक उदाहरण के रूप तुम्हारा उपयोग करने के लिए) है:

यह एक उदाहरण ठीक है

@inherits MyProject.HelperBase 
@using System.Web.Mvc 
@using System.Web.Mvc.Html 

@helper MakeButton(string linkText, string actionName, string controllerName, string iconName, string classes) { 
    <a href='@Html.ActionLink(linkText,actionName,controllerName)' class="btn @classes">Primary link</a> 
} 

इसके अलावा, आप सुनिश्चित करें कि आप(LinkExtensions के माध्यम से) @Html.ActionLink उपयोग करने के लिए मतलब नहीं था के बजाय कर रहे हैं 210? उत्तरार्द्ध में linkText, actionName, controllerName अधिभार नहीं लगता है, पूर्व करता है?

+0

आपकी बेस क्लास शानदार है! वही किया जो मुझे चाहिए, धन्यवाद। – Dan

+0

हाँ सही, बिल्कुल जो मैं खोज रहा था! – cuzzlor

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