Razor actionlink autogenerating ?length=7 in URL?

前端 未结 3 1663
无人及你
无人及你 2020-11-28 08:39

I have the link below on a razor page:

@Html.ActionLink(\"Create New Profile\", \"Create\", \"Profile\", new { @class=\"toplink\" })

It app

相关标签:
3条回答
  • 2020-11-28 08:52

    The ActionLink override you are using matches to the (string linkText, string actionName, Object routeValues, Object htmlAttributes) override. So your "Profile" value is being passed to the routeValues parameter. The behavior of this function with respect to this parameter is to take all public properties on it and add it to the list of route values used to generate the link. Since a String only has one public property (Length) you end up with "length=7".

    The correct overload you want to use is the (string linkText, string actionName, string controllerName, Object routeValues, Object htmlAttributes) and you call it loke so:

    @Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
    
    0 讨论(0)
  • 2020-11-28 08:57

    Another thing to note, since you are defining the controller in the @ActionLink, which you may not need to do, for example, the view that your "Create New Profile" @ActionLink is expressed in might be "/admin/profile/index.cshtml", a view that lists existing profiles, in this case, you do not need to define the controller in the @ActionLink as the @ActionLink is already relative to the ProfileController, so your @ActionLink could be

    @Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
    

    I used null instead of new{} as the marked answer does, I think this is more appropriate myself. ActionLink overloads are not the most straightforward thing ever.

    0 讨论(0)
  • 2020-11-28 09:15

    I'm not sure the exact cause of this, but change it to:

    @Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })
    

    I don't know which overload MVC is picking when you leave off the last parameter (htmlattributes is the added one), but that will fix it. One of these days I'll investigate and figure out exactly what's going on.

    0 讨论(0)
提交回复
热议问题