MVC部分视图回发调用错误的方法

时间:2015-04-22 19:08:46

标签: razor asp.net-mvc-5

我有以下部分视图,带有Html.FormBegin辅助方法;

@if (Session["UserSpecific"]!=null) //(Request.IsAuthenticated)
{
    using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
    {
    @Html.AntiForgeryToken()
            @* @Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })*@

            <input type="button" class="menu-button nav navbar-nav navbar-right" data-target=".customer-list" data-toggle="collapse" />

            <div class="customer-list-container">
                <div class="customer-list collapse">
                    <ul>
                        @{
                            string[] array = { "Steel Company", "Recycling Company", "Other Company", "Random Name Here" };   
                        }

                        @foreach (string name in array)
                        {
                            <li>@Html.ActionLink(name, "", "", routeValues: null, htmlAttributes: new { @class = "customer-link" })</li><hr/>
                        }

                        <li><input type="submit" /></li>
                    </ul>
                    <div class="col-xs-6">@Html.ActionLink("Settings", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })</div><div class="col-xs-6"><!--<input type="submit" value="Log Off"/>-><!--<a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></div><div class="clearfix">--></div>
                </div>
            </div>
    }
}

问题是,每当我点击“提交”按钮而不是注销时,它会再次运行LogIn方法,并将URL修改为:

Account/Login?ReturnUrl=%2FAccount%2FLogOff

我不知道为什么它再次运行LogIn方法,因为Html.BeginForm方法指定它将使用Account控制器中的LogOff方法。

被调用的Login方法:

        // GET: /Account/Login
    [AllowAnonymous]
    public ActionResult Login(string returnUrl)
    {
        ViewBag.ReturnUrl = returnUrl;
        return View();
    }

应该调用的LogOff方法:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        //AuthenticationManager.SignOut();
        Session.Remove("UserSpecific");
        Session["UserSpecific"] = null;
        return RedirectToAction("Index", "Home");
    }

2 个答案:

答案 0 :(得分:0)

Index上的HomeController操作方法似乎没有标记[AllowAnonymous]属性,这意味着当浏览器在注销后尝试访问它时,它会被重定向到再次登录页面,因为您正在尝试访问只有经过身份验证的用户才能访问的页面。

尝试添加[AllowAnonymous]

public class HomeController : Controller {

    [AllowAnonymous] // <-- add this
    public ActionResult Index() {
        return View();
    }

    // other stuff
}

答案 1 :(得分:0)

我刚刚意识到一些有趣的事情,我在我的MVC区域遇到同样的问题,在帐户控制器中调用索引方法而不是调用注销方法。 我意识到问题在于在应用程序的管理区域中完成了有缺陷的路由。 尝试测试一下,看看你是否能够纠正它。