Razor ActionLink autogenerating? Longitud = 7 en el URL?
-
08-10-2019 - |
Pregunta
Tengo el siguiente enlace en una página de afeitar:
@Html.ActionLink("Create New Profile", "Create", "Profile", new { @class="toplink" })
Aparece en thes fuente de página de vista como se muestra a continuación:
<a href="/admin/profile/create?length=7" class="toplink">Create New Profile</a>
Cuando hago clic en el enlace de la URL es la siguiente:
http://localhost:54876/admin/profile/create?length=7
No quiero ?length=7
. ¿Por qué se genera este auto?
Solución
La anulación ActionLink
está utilizando partidos a la (linkText cadena, cadena actionName, routeValues ??objeto, objeto htmlAttributes) anulación. Por lo que su valor de "perfil" se pasa al parámetro routeValues
. El comportamiento de esta función con respecto a este parámetro es tomar todas las propiedades públicas en él y añadirlo a la lista de valores de rutas utilizadas para generar el enlace. Desde una cadena sólo tiene una propiedad pública (longitud) que terminan con "longitud = 7".
La sobrecarga correcta que desea utilizar es el (cadena linkText, actionName cadena, cadena controllerName, routeValues ??objeto, objeto htmlAttributes) y lo llamas loke así:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink"})
Otros consejos
No estoy seguro de la causa exacta de esto, pero lo cambio a:
@Html.ActionLink("Create New Profile", "Create", "Profile", new {}, new { @class="toplink" })
No sé lo que sobrecargue MVC es recoger cuando salga fuera el último parámetro (htmlattributes
es el añadido uno), pero eso lo arreglo. Uno de estos días voy a investigar y averiguar exactamente lo que está pasando.
Otra cosa a destacar, ya que está definiendo el controlador en el @ActionLink
, que es posible que no tenga que hacer, por ejemplo, la opinión de que su @ActionLink
"Crear nuevo perfil" se expresa en que podría ser "/ admin / perfil / index.cshtml", a fin de que las listas de los perfiles existentes, en este caso, no es necesario definir el controlador en el @ActionLink
como el @ActionLink
ya está en relación con el ProfileController
, por lo que su @ActionLink
podría ser
@Html.ActionLink("Create New Profile", "Create", null, new { @class="toplink" })
Me null
utiliza en lugar de new{}
como la respuesta marcada hace, creo que esto es más apropiado a mí mismo. sobrecargas ActionLink no son lo más sencillo nunca.