Pregunta

Me he encontrado con un problema extraño con el método ActionLink en ASP.NET MVC Beta. Cuando utilizo la sobrecarga Lambda de los futuros MVC, parece que no puedo especificar un parámetro extraído de ViewData.

Cuando intento esto:

<%= Html.ActionLink<PhotoController>(p => p.Upload(((string)ViewData["groupName"])), "upload new photo") %>

El HTML contiene un enlace con una URL vacía.

    <a href="">upload new photo</a>

Sin embargo, si codifico el parámetro, como este:

<%= Html.ActionLink<PhotoController>(p => p.Upload("groupA"), "upload new photo") %>

La salida contiene una URL real.

    <a href="/group/groupA/Photo/Upload">upload new photo</a>

Supongo que esto probablemente tenga algo que ver con la visibilidad y disponibilidad de ViewData, y no estará allí cuando Lambda sea evaluada por los elementos internos del marco. Pero eso es solo una conjetura.

¿Estoy haciendo algo incorrecto en la primera muestra para causar esto, o es esto un poco corto de error?

Actualizar : estoy usando la última versión de los futuros de MVC. Se ha señalado que esto funciona para algunas personas. Como no me funciona, esto me hace pensar que es algo específico de lo que estoy haciendo. ¿Alguien tiene alguna sugerencia sobre qué ver a continuación, porque esta realmente me ha dejado perplejo?

¿Fue útil?

Solución 2

Ok, me di cuenta de cuál era mi problema.

Aparentemente, ni siquiera estaba configurando la ranura ViewData que intentaba leer en la vista, lo que resulta en un valor nulo.

Así que efectivamente estaba escribiendo:

<%= Html.ActionLink<PhotoController>(p => p.Upload(null), "upload new photo") %>

Creo que lo mejor para todo esto fue el hecho de que el parámetro (nombre de grupo) representa un valor no predeterminado en mi tabla de enrutamiento.

routes.MapRoute(
    "Group",  
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "View", Id = ""});

Por lo tanto, de acuerdo con la regla de enrutamiento, la propiedad nombre de grupo debe estar presente, pero, de acuerdo con esto, se omitió el nombre de archivo de Lambda (nulo). Esto dio como resultado que el marco MVC no pudo encontrar una ruta que satisficiera mi consulta y que simplemente devolviera un valor nulo.

Otros consejos

¿Ha actualizado su versión de Microsoft.Web.Mvc.dll donde reside el enlace de acción Escrito con fuerza?

Al parecer, esta dll se ha actualizado para la versión Beta. La función puede haber sido ligeramente modificada.

Acabo de intentar esto

<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %>

y funcionó bien.

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