2013-04-17 4 views
6

In meinem Controller i Klasse Account haben und innerhalb in i dieser Methode habenasp.net MVC 4 Rufmethode von der Steuerung durch Taste

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult LogOff() 
{ 
    WebSecurity.Logout(); 
    return RedirectToAction("Index", "Home"); 
} 

In meiner Ansichten ich habe cshtml Seite mit Körper und diesen Teil des Codes

Und das funktioniert nicht, jemand weiß, was ist das Problem oder eine andere einfache Lösung?

Antwort

4

Sie sind nicht die Aktionsmethode hier Referenzierung:

action="Controllers/AccountController" 

Für den Anfang brauchen Sie nicht Controllers/ angeben, da das Framework die Steuerung für Sie. In der Tat ist die Vorstellung eines "Ordners" von Controllern dem Client/URL/etc nicht bekannt. Was Sie ihm geben müssen, ist eine "Route" zu der spezifischen Aktionsmethode.

Da das MVC-Framework weiß, wo die Controller sind, Sie müssen es nur sagen, welche Controller und welche Aktion Verfahren auf diesem Controller:

action="Account/LogOff" 
5

Das Attribut action weist auf eine falsche Controller-Aktion hin. Ihre Controller-Aktion heißt LogOff und nicht AccountController. Sie sollten nie <form> Elemente wie die von Hand bauen, sondern immer die HTML-Helfer verwenden, die für diesen Zweck ausgelegt sind:

@using (Html.BeginForm("LogOff", "Account")) 
{ 
    <button class="btn btn-inverse" title="Log out" type="submit">Log Off</button> 
} 
0

Das Aktionsformular wahrscheinlich /Account/LogOff

< form class="float_left" action="/Account/Logoff" method="post"> 
    <button class="btn btn-inverse" title="Log out" type="submit">Log Off</button> 
</form> 

Versuchen Sie dies in der .cshtml setzen sollte Datei:

@using (Html.BeginForm("LogOff", "Account")) 
{ 
    <button class="btn btn-inverse" title="Log out" type="submit">Log Off</button> 
}