Html.BeginForm不会触发Controller Action

时间:2015-04-09 22:19:02

标签: c# asp.net-mvc controller html.beginform

我是编程新手,特别是C#/ Asp.Net MVC的新手,我已经尝试了一段时间才能使这个工作起来,而且我的想法已经用完了。我试图在网上找到答案,但还没有提出解决方案(即使在阅读并尝试我发现类似问题的方法之后)。这个论坛对发布新内容有点吓人,但我现在卡住了。所以我想我会试一试。

我正在制作这个项目,我正在使用bootstrap,asp.net和C#来创建一个类似电子商务网站的网页。目前我正在使用登录系统。我正在使用SimpleMembership并尝试创建一个登录表单,该登录表单不需要仅用于登录的新页面,它实际上是在共享视图上。

以下是使用登录部分的表单的视图:

@model FakeStore.ViewModels.MenuSuperiorModel
<form class="navbar-form navbar-right">
    @if (!WebSecurity.IsAuthenticated)
    {
        using (Html.BeginForm("Autentica", "Login", FormMethod.Post))
        {
            <div class="form-group">
                @Html.TextBoxFor(m => m.login, new { @class="form-control",         placeholder="Login" })
            </div>
            <div class="form-group">
                @Html.TextBoxFor(m => m.senha, new { @class ="form-control", placeholder="Senha"})
            </div>
                @Html.HiddenFor(m => m.CarrinhoCount)
            <input type="submit" value="Sign in" class="btn btn-success" />
            <a class="btn btn-success" href="~/Usuario/Form">Register</a>
        }

    }

    else if (WebSecurity.IsAuthenticated)
    {
        <span class="label label-primary">Welcome, @(WebSecurity.CurrentUserName)!</span>
    }
</form>

该视图是布局页面上另一个局部视图的子视图。

这是调用登录表单视图的部分视图:

<nav class="navbar navbar-inverse navbar-fixed-top">
    <div class="container">
        @Html.Partial("_CarrinhoCompraTopMenu")
        <div id="navbar" class="navbar-collapse collapse">
        <!-- vamos ver se dá problema esse _LoginMenu -->
        @Html.Partial("_LoginMenu")
        </div><!--/.navbar-collapse -->
    </div>
</nav>

这是带有Action的BeginForm方法应该调用的控制器:

public class LoginController : Controller
{
    // GET: Login
    private UsuarioDAO udao;

    public LoginController(UsuarioDAO udao)
    {
        this.udao = udao;
        if (!WebSecurity.Initialized)
        {
            WebSecurity.InitializeDatabaseConnection("StoneECommerce", "Usuario", "Id", "Login", true);
        }
    }
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Autentica(MenuSuperiorModel menuSuperiorModel)
    {
        if (WebSecurity.Login(menuSuperiorModel.login, menuSuperiorModel.senha))
        {
            return RedirectToAction("Form", "Produto");
        }
        else
            ModelState.AddModelError("login.Invalido", "Login ou senha incorretos");
        return View("Index");
    }

    public ActionResult LoginMenu()
    {
        return PartialView("_LoginMenu");
    }

我正在尝试获取提交按钮以将MenuSuperiorModel发送到LoginController的操作Autentica,以便它可以对用户进行身份验证。但问题是,它甚至没有采取行动。我尝试在其上设置断点,但未调用该操作。我错过了什么吗?我非常感谢你的帮助。

ps:我也没有配置自定义路由。

1 个答案:

答案 0 :(得分:1)

您有嵌套的表单,这些表单是无效的HTML并且不受支持。删除外部<form class="navbar-form navbar-right">元素。