2011-06-16 13 views
9

I tienen un controlador en un área llamada Admin¿Por qué Html.BeginForm genera una acción vacía?

public class SiteVisitController : Controller 
{ 
    public ViewResult ReadyForCompletion() { ... } 

    public ViewResult CompleteAndExport() { ... } 
} 

y una vista (ReadyForCompletion.cshtml) que tiene puestos de nuevo a una acción de un controlador diferente de la misma clase

@using (Html.BeginForm("CompleteAndExport", "SiteVisit")) 
{   
    <input type="submit" value="Complete &amp; Export" /> 
} 

el HTML generado para esta forma tiene una acción en blanco:

<form action="" method="post"> <input type="submit" value="Complete &amp; Export" /> 

</form> 

Quiero saber por qué esto tiene ab ¿acción lacia? Para obtener más información, también añade en una

@Url.RouteUrl(new { controller = "ReadyForCompletion", action = "SiteVisit", area = "Admin" }) 

que también imprime una cadena vacía. Además, si uso un Html.BeginForm() vacío, genera la acción correcta.

rutas son registrados

 context.MapRoute(
      "Admin_manyParams", 
      "Admin/{controller}/{action}/{id}/{actionId}", 
      new { action = "Index", id = UrlParameter.Optional, actionId = UrlParameter.Optional } 
     ); 
+0

¿Puede mostrar las rutas registradas? –

+0

Agregué las rutas registradas, pero estoy confundido por qué eso importaría ya que puedo hacer con éxito 'Html.BeginForm()' – kelloti

Respuesta

0

Para aquellos de ustedes que tiene este problema utilizando ASP.NET Core la causa raíz es la misma, aunque la solución es ligeramente diferente. La primera vez que vi esto en Core usó múltiples valores predeterminados al llamar al .MapRoutes(). P.ej.

routes.MapRoute(
    name: "default", 
    template: "{controller}/{action}/{id?}", 
    defaults: new { controller = "Foo", action = "Bar" } 
); 

La solución consiste en colocar los valores por defecto en la plantilla de cadena:

routes.MapRoute(
    name: "default", 
    template: "{controller=Foo}/{action=Bar}/{id?}" 
); 

tu caso es distinto.

Cuestiones relacionadas