2013-09-21 1 views
5

Ho cercato sul Web di trovare un buon esempio/tutorial che spiega come creare e utilizzare i miei helper HTML personalizzati per la mia applicazione Razor MVC 3 Ho trovato questo che è come segueAggiunta di un helper HTML personalizzato a MVC Project

Adding your own HtmlHelper in ASP.NET MVC 3

ho creato una classe (rifilato giù un po ') come modo

using System; 
using System.Collections.Generic; 
using System.Globalization; 
using System.Linq; 
using System.Linq.Expressions; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 

namespace MyWebApp 
{ 
    public static class ExtensionMethods 
    { 
     public static MvcHtmlString StateDropDownListFor<TModel, TValue> 
         (this HtmlHelper<TModel> html, 
             Expression<Func<TModel, TValue>> expression) 
     { 
      Dictionary<string, string> stateList = new Dictionary<string, string>() 
      { 
       {"AL"," Alabama"}, 
       {"AK"," Alaska"}, 
       {"AZ"," Arizona"}, 
       {"AR"," Arkansas"} 

       }; 
       return html.DropDownListFor(expression, 
         new SelectList(stateList, "key", "value")); 
     } 

    } 
} 

Fin qui tutto bene,

Dentro il mio controller Ho anche aggiunto il riferimento

using System.Web.Mvc.Html; 

Ora dentro la mia vista ho il seguente

@Html.StateDropDownList(x => x.State) 

Ma io ottenere il seguente errore

System.web.mvc.htmlhelper<system.collections.generic.list<Profile.ProfileImages>> does  not contain a definition for StateDropDownList and no extension method  StateDropDownList acception a first argument of type  system.web.mvc.htmlhelper<System.Collections.Generic.List<Profile.ProfileImages>> could be  found(Are you missing a using directive of an assembly reference?) 

Qualcuno potrebbe dirmi che cosa sto sbagliando qui.

+0

Avete un helper HTML chiamato DisplayImageFor? –

+0

@ UfukHacıoğulları Spiacente ho aggiunto la dichiarazione di errore errata, ho aggiornato quanto sopra. –

risposta

15

È necessario includere il namespace nella vista:

@using MyWebApp 

oppure è possibile importare questo spazio dei nomi per tutti i punti di vista da web.config.

<system.web.webPages.razor> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
    <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="MyWebApp" /> 
    </namespaces> 
    </pages> 
</system.web.webPages.razor> 
+0

Grazie per il vostro aiuto. –

3

penso una scelta più facile sarebbe quella di effettuare le seguenti operazioni: 1. Creare una vista, come al solito, inserire il vostro aiutanti in che come al solito con il mix di codice e HTML come ti piace. 2. Spostare la vista nella cartella App_Code. 3. raggiungere la vostra aiuta in tutti i vostri punti di vista come modo (Si noti che _MyHelpers è il nome della vista nella cartella App_Code):

@_MyHelpers.JQMRadioTrueFalse("Voice Mail on your Home Phone?", "HomePhoneHasAnswerPhone", Model.TrueFalse, t.HomePhoneHasAnswerPhone) 

Questo sarebbe un esempio di una vista nella cartella App_Code che è accesso su qualsiasi vista come sopra:

@helper JQMRadioList(string Legend, string RadioListName, List<Fizz.DomainClasses.GenericClasses.GenericDropDownOption> options, bool Horizontal = false, string CurrentSelection = "") 
    { 
     <fieldset data-role="controlgroup" data-mini="true" data-theme="b" @((Horizontal) ? " data-type=\"horizontal\"" : "")> 
      <legend>@Legend:</legend> 
      @foreach (var li in options) 
      { 
       @JQMRadioListItem(RadioListName, li.TheValue, li.Text, CurrentSelection) 
      } 
     </fieldset> 
    } 
+0

Non so chi abbia votato, ma potrei chiedere qual è stata la ragione? – Michael

+0

Questa risposta mostra come creare un helper in una vista. È un'alternativa alle viste basate su codice e non c'è motivo per il downvote. –