1

ホームページにログインフォームが欲しい。私はこれindex.cshtmlを持っています:

@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);
        }

(私は、Web フォームの土地を永遠に残してしまった MVC の初心者です。)

4

3 に答える 3

8

フォームで AccountController の代わりに Account を使用します。ASP MVC は命名規則に基づいており、コントローラーが暗示されています。

于 2012-10-12T17:53:09.523 に答える
2

以下の行でコントローラーの名前を変更します

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

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

ASP.NET MVC は、ルーティング構成を介して Controller で終わるものを自動的に検出するためです。

于 2012-10-12T17:57:37.863 に答える
0

認証セクションでWeb.configは、ログイン タイプを指定します。

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

設定が間違っWeb.configている可能性があります。

于 2012-10-12T17:55:52.500 に答える