2011-11-28 11 views
23

C'è qualcosa di sbagliato in questo html? Voglio avere un link nella pagina principale per navigare nella vista "CreateParts". Ho azioni 'CreateParts' che hanno un parametro parentPartId nel controller 'PartList'.Passaggio del parametro all'azione del controller da un Html.ActionLink

<li id="taskAdminPartCreate" runat="server"> 
            <%= Html.ActionLink("Create New Part", "CreateParts", "PartList", new { parentPartId = 0 })%></li> 

La mia azione di controllo è come

public ActionResult CreateParts(int parentPartId) 
    { 
     HSPartList objHSPart = new HSPartList(); 
     objHSPart.Id = parentPartId; 
     return View(objHSPart); 
    } 

Quando clicco su 'Crea nuovo Parte' nel menu in SiteMaster, ottengo un'eccezione. Per favore aiutami a uscire da questo.

+2

Aggiungendo l'eccezione alla domanda sarebbe bello :) –

+13

tizio, che diavolo è runat = server di farlo su quel povero Li? non stuprare MVC :) – rouen

+0

rouen, puoi aiutare con le migliori pratiche in asp.net mvc –

risposta

55

Si sta utilizzando un sovraccarico errato. Si dovrebbe usare questo sovraccarico

public static MvcHtmlString ActionLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName, 
    Object routeValues, 
    Object htmlAttributes 
) 

E il codice corretto sarebbe

<%= Html.ActionLink("Create New Part", "CreateParts", "PartList", new { parentPartId = 0 }, null)%> 

Nota che il parametro extra alla fine. Per gli altri sovraccarichi, visitare LinkExtensions.ActionLink Method. Come puoi vedere, non esiste un sovraccarico di string, string, string, object che stai tentando di utilizzare.

+1

Sei fantastico @archill. Hai risparmiato un sacco di tempo, grazie –

+0

Grazie, mi mancava nulla. –

10

Si sta utilizzando il sovraccarico non corretto di ActionLink. Prova questo

<%= Html.ActionLink("Create New Part", "CreateParts", "PartList", new { parentPartId = 0 }, null)%> 
9

aggiunta alla risposta accettata:

se avete intenzione di usare

@Html.ActionLink("LinkName", "ActionName", "ControllerName", new { @id = idValue, @secondParam= = 2 },null) 

questo creerà ActionLink in cui non è possibile creare nuovi attributo personalizzato o di stile per il collegamento.

Tuttavia, il 4 ° parametro nell'estensione ActionLink risolverà il problema. Usa il 4 ° parametro per la personalizzazione a modo tuo.

@Html.ActionLink("LinkName", "ActionName", "ControllerName", new { @id = idValue, @secondParam= = 2 }, new { @class = "btn btn-info", @target = "_blank" })