2013-01-14 34 views
1

我希望注销链接执行位于HomeController中的进程,而不是显示新的View。我如何去构造这个?想要超链接到控制器方法而不是视图

控制器的方法:

public ActionResult LogoutProcess() 
    { 
     previousLoggedIn = WebSecurity.CurrentUserName; 
     WebSecurity.Logout(); 
     return RedirectToAction("Logout", "Home"); 
    } 

    public ActionResult Logout(HomeModels.LogoutModel model) 
    { 
     model.PreviouslyLoggedInUsername = previousLoggedIn; 
     return View(model); 
    } 

查看:

<a href = "@Url.Action("LogoutProcess", "Home")">Logout</a> 
+2

你有没有想过发送一个AJAX请求到家庭控制器? – boindiil

+0

我宁可不要。 – Neeta

回答

1

您可以使用标准的链接,靶向作用

@Url.Action("LogoutProcess", "Home") 

的 “绝招” 是重定向LogoutProcess()行动结束时的其他一些视图:

public ActionResult LogoutProcess() 
{ 
    // TempData to transfer user name  
    TempData["previousLoggedIn"] = WebSecurity.CurrentUserName; 
    WebSecurity.Logout(); 
    return RedirectToAction("Logout", "Home"); 
} 

public ActionResult Logout(HomeModels.LogoutModel model) 
{ 
    // fill model from TempData 
    model.PreviouslyLoggedInUsername = TempData["previousLoggedIn"]; 
    return View(model); 
} 

CurrentUserName通过TempData

+0

那么会执行索引控制器吗? – Neeta

+0

索引是一个嵌套在HomeController中的动作名称(正如我想的那样)。但它可能是帐户控制器。只需调整Url.Action(actionName,controllerName)和从LogoutProcess重定向到你想要的控制器(Home,Account ...)是否有意义? –

+0

对不起,我的意思是行动,认为我在那里使用了错误的词。谢谢! – Neeta

0

传递给其他行动试试这个:

public ActionResult LogoutProcess() 
{ 
    WebSecurity.Logout(); 
    //return null; 
    Return RedirectToAction("Index");//or whatever page you want to display after logout. 
} 
+0

当我通过我的代码时,它不使用我在我的控制器中定义的注销操作。我已经更新了我的代码。 – Neeta

0

你有没有考虑一个没有内容的HTTP状态代码的结果?

return new HttpStatusCodeResult(HttpStatusCode.NoContent); 
相关问题