2012-10-12 148 views
1

我想在我的主页上登录一个表单。在index.cshtml我有这样的:ASP.NET MVC 4 - 登录首页

@using (Html.BeginForm("Login", "AccountController", FormMethod.Post)) { 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 
     <div> 
      <div class="usernametb"> 
       @Html.LabelFor(m => m.LoginMod.UserName) 
      </div> 
      <div class="usernametb"> 
       @Html.TextBoxFor(m => m.LoginMod.UserName, new { style = "width:150px" }) 
       @Html.ValidationMessageFor(m => m.LoginMod.UserName) 
      </div> 
     </div> 
     <div class="clear"></div> 
     <div> 
      <div class="pwtb"> 
       @Html.LabelFor(m => m.LoginMod.Password) 
      </div> 
      <div class="pwtb"> 
       @Html.PasswordFor(m => m.LoginMod.Password, new { style = "width:150px" }) 
       @Html.ValidationMessageFor(m => m.LoginMod.Password) 
      </div> 
     </div> 
     <div class="clear"></div> 
     <div class="rememberme"> 
      @Html.CheckBoxFor(m => m.LoginMod.RememberMe) 
      @Html.LabelFor(m => m.LoginMod.RememberMe, new { @class = "checkbox" }) 
     </div> 
     <div><input class="loginbutton" type="submit" value="Log In" /></div> 
} 

我引用这个模型:

namespace memsite.Models 
{ 
    public class MemEvent 
    { 
     public LoginModel LoginMod { get; set; } 
     public DateTime Start { get; set; } 
     public DateTime End { get; set; } 
     public string Name { get; set; } 
     public string Description { get; set; } 
    } 
} 

我想打到这个账号控制器登录动作,但它从来没有击中控制器,它只是重新定向到/AccountController/Login这不存在。此外,验证控件不工作...

namespace memsite.Controllers 
{ 
    [Authorize] 
    [InitializeSimpleMembership] 
    public class AccountController : Controller 
    { 
     // 
     // GET: /Account/Login 

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

     // 
     // POST: /Account/Login 

     [HttpPost] 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     public ActionResult Login(LoginModel model, string returnUrl) 
     { 
      if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
      { 
       return RedirectToLocal(returnUrl); 
      } 

      // If we got this far, something failed, redisplay form 
      ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      return View(model); 
     } 

(我是全新的,以MVC不舍web表单土地永远。)

回答

8

使用的帐户,而不是在的AccountController的形式。 ASP MVC基于命名约定和Controller是隐含的。

0

Web.config认证部分指定你有一个登录类型:

<authentication mode="Forms"> 
    <forms loginUrl="Account/Login" timeout="2880" /> 
</authentication> 

也许你的Web.config有一个错误配置。

+0

由于检测任何与控制器的结局。我现在打高尔夫球,但稍后会测试并接受答案 – nerdperson

2

在下面一行

@using (Html.BeginForm("Login", "AccountController", FormMethod.Post)) { 

改变控制器的名称

@using (Html.BeginForm("Login", "Account", FormMethod.Post)) { 

因为ASP.NET MVC会自动通过里边反路由配置