2011-11-28 34 views
23

¿Hay algún problema con este html? Quiero tener un enlace en la página maestra para navegar a la vista "Crear Partes". Tengo la acción 'CreateParts' que tiene un parámetro parentPartId en el controlador 'PartList'.Pasando el parámetro a la acción del controlador desde Html.ActionLink

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

Mi acción del controlador es como

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

Cuando hago clic en 'Crear nueva Parte' en el menú en SiteMaster, consigo una excepción. Por favor, échame una mano con esto.

+2

añadiendo la excepción a la cuestión sería bueno :) –

+13

amigo, ¿qué diablos es runat = server haciendo en ese pobre li? no viole MVC :) – rouen

+0

rouen, puede ayudar con las mejores prácticas en asp.net mvc –

Respuesta

55

Está utilizando una sobrecarga incorrecta. Usted debe usar esta sobrecarga

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

Y el código correcto sería

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

Tenga en cuenta que el parámetro extra al final. Para las otras sobrecargas, visite LinkExtensions.ActionLink Method. Como puede ver, no hay una sobrecarga string, string, string, object que esté tratando de usar.

+1

Eres genial @archill. Ahorraste mucho tiempo, gracias –

+0

Gracias, me faltaba nulo. –

10

Está utilizando la sobrecarga incorrecta de ActionLink. Pruebe esto

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

adición a la respuesta aceptada:

si se va a utilizar

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

Esto creará ActionLink donde no se puede crear un nuevo atributo personalizado o estilo para el enlace.

Sin embargo, el cuarto parámetro en la extensión ActionLink resolverá ese problema. Use el 4 ° parámetro para la personalización en su camino.

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