2011-06-16 14 views
9

Mam kontroler w okolicy zwanej AdminDlaczego Html.BeginForm generuje puste działanie?

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

    public ViewResult CompleteAndExport() { ... } 
} 

i widok (ReadyForCompletion.cshtml), który ma wiadomości z powrotem do innego działania kontrolera w tej samej klasie

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

Wygenerowany HTML dla tej formy ma pustą akcję:

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

</form> 

Chcę wiedzieć dlaczego to ma ab prosta akcja? Aby uzyskać więcej informacji, dodałem także w

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

który również wydrukowany pusty ciąg. Ponadto, jeśli użyję pustego Html.BeginForm(), generuje on poprawną akcję.

Zarejestrowani trasy są

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

można pokazać zarejestrowanych tras? –

+0

dodałem zarejestrowanych tras, ale jestem zdezorientowany przez dlatego, że miałoby to znaczenia, ponieważ można z powodzeniem zrobić 'Html.BeginForm()' – kelloti

Odpowiedz

0

Dla tych z Was, napotykając ten problem przy użyciu ASP.NET Rdzeń przyczyną jest taka sama, choć rozwiązanie jest nieco inna. Po raz pierwszy zobaczyłem to w rdzeniu używając wielu wartości domyślnych podczas wywoływania .MapRoutes(). Na przykład.

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

Rozwiązaniem jest umieszczenie wartości domyślnych w szablonie ciąg:

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

YMMV.

Powiązane problemy