2016-02-24 71 views
0

我有一個有趣的問題。 Google搜索後似乎沒有答案。註銷ASP.NET身份JavaScript錯誤

使用稍微定製版本的_LoginPartial.cshtml我似乎在單擊註銷時出現附加錯誤。沒有看到這種行爲,並且如果有人能弄明白的話,會愛上一些幫助。

_LoginPartial.cshtml

@if (Request.IsAuthenticated) 
{ 

    <ul class="nav navbar-nav navbar-right" style="margin-right: 15px;"> 
     <li> 
      @Html.ActionLink("Hello " + ViewData["FullName"] + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" }) 
     </li> 
     <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li> 
    </ul> 

} 
else 
{ 
    <ul class="nav navbar-nav navbar-right" style="margin-right: 15px;"> 
     <li>@Html.ActionLink("Log In", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li> 
    </ul> 
} 

錯誤消息 LogoutError

+0

這是相當明顯的是,有一個與它正在查找的ID文件中沒有的元素。爲什麼缺失不能從你在這裏顯示的文件中推斷出來。 – juunas

+0

我們需要在_LoginPartial.cshtml文件中看到更多的代碼。您的示例沒有顯示帶有ID logoutForm的

或@ Html.BeginForm()元素。 – Chad

+0

您的自定義刪除了一些關鍵代碼。提交的答案都可以提供很好的解決方案。 – Theophilus

回答

1

爲了使這項工作,你應該更新表單並在其上添加BeginForm。它應該看起來像這樣:

@if (Request.IsAuthenticated) 
{ 
    using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" })) 
    { 

    <ul class="nav navbar-nav navbar-right" style="margin-right: 15px;"> 
     <li> 
      @Html.ActionLink("Hello " + ViewData["FullName"] + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" }) 
     </li> 
     <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li> 
    </ul> 
    } 
} 
else 
{ 
    <ul class="nav navbar-nav navbar-right" style="margin-right: 15px;"> 
     <li>@Html.ActionLink("Log In", "Login", "Account", routeValues: null, htmlAttributes: new { id = "loginLink" })</li> 
    </ul> 
} 
1

所有你需要的只是一個POST到註銷操作。

可以在純HTML加回空白表單:

<form action="Account/Logout" id="logoutForm"><form> 

註銷鏈接不一定是表單內。如果你有一些css規則來搞亂<form>標籤內的超鏈接。

翻譯成剃刀。你可以做

using (Html.BeginForm("LogOff", "Account", new { area = "" }, FormMethod.Post, new { id = "logoutForm" })) ... 

像其他答案建議。

或者只是保持簡單的HTML,或只是

<form action='@Url.Action("Logout","Account")' id="logoutForm"><form>