web-dev-qa-db-fra.com

Passer le paramètre à l'action du contrôleur à partir d'un Html.ActionLink

Y a-t-il un problème avec ce code HTML? Je veux avoir un lien dans la page principale pour accéder à la vue "CreateParts". J'ai l'action 'CreateParts' qui a un paramètre parentPartId dans le contrôleur 'PartList'.

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

Mon action de contrôleur est comme

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

Lorsque je clique sur "Créer une nouvelle pièce" dans le menu de SiteMaster, j'obtiens une exception. S'il vous plaît, aidez-moi à sortir de cela.

27
Suja Shyam

Vous utilisez une surcharge incorrecte. Vous devez utiliser cette surcharge

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

Et le bon code serait

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

Notez ce paramètre supplémentaire à la fin. Pour les autres surcharges, visitez LinkExtensions.ActionLink Method . Comme vous pouvez le voir, il n'y a pas de string, string, string, object surcharge que vous essayez d'utiliser.

63
archil

Vous utilisez une surcharge incorrecte d'ActionLink. Essaye ça

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

Ajout à la réponse acceptée:

si vous allez utiliser

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

cela créera un lien d'action où vous ne pourrez pas créer de nouvel attribut ou style personnalisé pour le lien.

Cependant, le 4ème paramètre de l'extension ActionLink résoudra ce problème. Utilisez le 4ème paramètre pour la personnalisation à votre façon.

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