2013-06-06 30 views
5

Bir yardımcı oluşturmaya çalıştığım bir MVC4 projem var. "App_Code" adlı bir klasör ekledim ve bu klasörde MyHelpers.cshtml adlı bir dosya ekledim. İşte o dosyanın tüm içeriği şunlardır:'Url' adı geçerli içerik hatasına sahip değil

@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> 
} 

ben "temizlenmiş" ve çözümü inşa

(Ben bu tamir sonra o alırsınız daha sonra, bazı kullanılmayan parametreler vardır biliyor) , hata yok.

Yardımcıyı kullanan sayfada, bu kodu ekledim.

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

Projeyi çalıştırmayı denediğinizde, aşağıdaki hatayı alıyorum:

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

bunu yazmam doğru bir yol bulmak gibi olamaz - Ben yanlış yapıyorum? Web'de gördüğüm örneklere kıyasla doğru görünüyor mu?

+2

Bunun gibi bir şey yapmanız gerektiğini düşünüyorum: http://stackoverflow.com/questions/4710853/using-mvc-htmlhelper-extensions-from-razor-declarative-views. – JeffB

+0

'@ Url.Action' yerine' @ Html.ActionLink' kullanmak mı istiyorsunuz? İki hakkındaki cevabıma dipnot koydum. –

cevap

4

JeffB'nin linki önerdiği gibi, yardımcı dosyanızın UrlHelper nesnesine erişimi yoktur.

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; } 
     } 
    } 
} 

Ve sonra benim yardımcı I (örnek olarak sizinkini kullanmak için) do: Bir temel sınıf yaratıp benim yardımcıları için

@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

:

Bu

örnek düzeltmedir

Ayrıca
@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> 
} 

, emin sen (LinkExtensions üzerinden) @Html.ActionLink kullanmak anlamına yerineetmedi vardır 210 mu? İkincisi, eski bir linkText, actionName, controllerName aşırı yükü var gibi görünüyor?

+0

Temel sınıfınız mükemmel! Tam olarak ihtiyacım olanı yaptım, teşekkürler. – Dan

+0

Evet, tam olarak ne arıyordum! – cuzzlor