2013-08-06 11 views
8

Ho un'app Web MVC4 e attualmente ho alcuni @helper che uso su più pagine, definite in cshtml. Il problema è che devo definirli su ogni pagina che vengono utilizzati. È possibile creare un file .cshtml che contenga tutti i miei @helper e includerlo nelle mie visualizzazioni?Spostare gli helper del rasoio comuni su un altro file

Ad esempio, questo viene utilizzato su ogni vista Indice nell'area dei cm.

@helper DisplayPager(Int32 CurrentPage, Int32 MaxPages) { 
    String IsActive = ""; 
    <div class="pagination pagination-centered"> 
     <ul> 
      <li><a href="@Url.Action("Index", new { id = CurrentPage - 1 > 0 ? CurrentPage - 1 : 1 })">Prev</a></li> 
      @for (int i = 0; i < MaxPages; i++) 
      { 
       IsActive = ((i + 1) == CurrentPage) ? "active" : ""; 

       <li class="@(IsActive)"><a href="@Url.Action("Index", new { id = i + 1 })">@(i + 1)</a></li>  
      } 
      <li><a href="@Url.Action("Index", new { id = CurrentPage + 1 < MaxPages ? CurrentPage + 1 : MaxPages })">Next</a></li> 
     </ul> 
    </div> 
} 

Stessa definizione, stesso codice, stessa cosa, ma è nel codice di almeno 15 volte.

+0

Dipende da quello che il corpo di questi metodi sono, ma ti consiglierei solo dispone di un file classe statica ('.cs') che ha tutte le funzioni comuni. Puoi includere quel file nel tuo file '.cshtml' con' @include MyProject.MyHelpers' per esempio. – musefan

+0

Ho aggiornato il codice per rendere più semplice la risposta – bizzehdee

+0

La possibilità di definire metodi helper riutilizzabili usando la sintassi @helper è disponibile, vedere quanto segue: http://weblogs.asp.net/scottgu/archive/ 2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx –

risposta

10

Ecco le istruzioni per ottenere che

Questa procedura mostra come creare l'helper che crea la nota, come appena descritto. Questo è un semplice esempio, ma l'helper personalizzato può includere qualsiasi codice di markup e ASP.NET di cui hai bisogno.

  1. Nella cartella principale del sito Web, creare una cartella denominata App_Code. Questo è un nome di cartella riservato in ASP.NET in cui è possibile inserire il codice per componenti come helper.

  2. Nella cartella App_Code creare un nuovo file .cshtml e denominarlo MyHelpers.cshtml.

  3. sostituire il contenuto esistente con il seguente:

    @helper MakeNote(string content) 
    { 
        <div class="note" 
         style="border: 1px solid black; width: 90%; padding: 5px; margin-left: 15px;"> 
        <p> 
         <strong>Note</strong>&nbsp;&nbsp; @content 
        </p> 
        </div> 
    } 
    

    Il codice utilizza la sintassi @helper per dichiarare un nuovo aiutante di nome MakeNote. Questo particolare helper ti consente di passare un parametro denominato content che può contenere una combinazione di testo e markup. L'helper inserisce la stringa nel corpo della nota utilizzando la variabile @content.

    Si noti che il file è denominato MyHelpers.cshtml, ma l'assistente si chiama MakeNote. Puoi mettere più helper personalizzati in un singolo file.

  4. Salvare e chiudere il file.

stato copiato da questo article

+5

Questo funziona, e sembra essere il modo standard per farlo, ma è un attacco così orribile. Perché Microsoft ha deciso che App_Code era il posto in cui mettere gli assistenti condivisi al di fuori di me. Le viste dovrebbero essere nella cartella Viste. Questo è completamente contro-intuitivo. – user1751825

Problemi correlati