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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top