Click here to Skip to main content
15,887,135 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
Hi Team

I have created a login, but its not loading. the routeConfig does map the action with controller. The controller itself does have a method name, as well view.

What I have tried:

// Controller class
// GET: /Account/Login
[AllowAnonymous]
public ActionResult Login(string returnUrl)
{
    TempData["ErrorMessage"] = "";
    TempData["LoginMessage"] = "";
    ViewBag.ReturnUrl = returnUrl;
    return View();
}

//
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Index(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model);

    }

    var emailExist = await UserManager.FindByEmailAsync(model.Email);
    if(emailExist != null)
    {
        if(emailExist.EmailConfirmed == false)
        {
            string code = await UserManager.GenerateEmailConfirmationTokenAsync(emailExist.Id);
            var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = emailExist.Id, code = code }, protocol: Request.Url.Scheme);
            await UserManager.SendEmailAsync(emailExist.Id, "Confirm your account", ConfirmAccountMailBody(callbackUrl));

            TempData["ErrorMessage"] = "Email id is not verified. Please check your email and verify account !!!";
            ViewBag.JavaScriptFunction = "ShowErrorPopup();";
            return View(model);
        }
    }
    else
    {
        TempData["ErrorMessage"] = "Email is not registered !!!";
        ViewBag.JavaScriptFunction = "ShowErrorPopup();";
        return View(model);
    }

    var loggedinUser = await UserManager.FindAsync(model.Email, model.Password);
    if(loggedinUser !=null)
    {
        await UserManager.UpdateSecurityStampAsync(loggedinUser.Id);
    }

    // This doesn't count login failures towards account lockout
    // To enable password failures to trigger account lockout, change to shouldLockout: true
    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
    switch (result)
    {
        case SignInStatus.Success:
            return RedirectToLocal(returnUrl);
        case SignInStatus.LockedOut:
            return View("Lockout");
        case SignInStatus.RequiresVerification:
            return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = model.RememberMe });
        case SignInStatus.Failure:
        default:
            TempData["ErrorMessage"] = "Email or Password is Incorrect";
            ViewBag.JavaScriptFunction = "ShowErrorPopup();";
            return View(model);
    }
}


// Route-Config
// Route to Login.
         routes.MapRoute(
            name: "Login",
            url: "login/",
            defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );


// Index.cshtml
@using eNtsaRegistrationTraining.Models
@model LoginViewModel
@{
    ViewBag.Title = "Login";
    Layout = "~/Views/Shared/_LoginLayout.cshtml";
}


<div class="login-box">
    <div class="login-logo">
        <a href="@Url.RouteUrl("Login")">eNtsa Registration</a>
    </div>
    <!-- /.login-logo -->
    <div class="card">
        <div class="card-body login-card-body">
            <p class="login-box-msg">Sign in to start your session</p>
            @using (Html.BeginForm("Index", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @role = "form" }))
            {
                @Html.AntiForgeryToken()
                <div class="input-group mb-3">
                    @Html.TextBoxFor(m => m.Email, new { @class = "form-control", type = "email", placeholder = "Email", autofocus = "autofocus", required = "required" })
                    <div class="input-group-append">
                        <div class="input-group-text">
                            <span class="fas fa-envelope"></span>
                        </div>
                    </div>
                </div>
                <div class="input-group mb-3">
                    @Html.PasswordFor(m => m.Password, new { @class = "form-control", type = "password", placeholder = "Password" })
                    <div class="input-group-append">
                        <div class="input-group-text">
                            <span class="fas fa-lock"></span>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-8">
                        <div class="icheck-primary">
                            @Html.CheckBoxFor(m => m.RememberMe, new { @type = "checkbox", id = "remember" })
                            <label for="remember">
                                Remember Me
                            </label>
                        </div>
                    </div>
                    <!-- /.col -->
                    <div class="col-4">
                        <button type="submit" class="btn btn-primary btn-block">Sign In</button>
                    </div>
                    <!-- /.col -->
                </div>
            }

            <div class="social-auth-links text-center mb-3">
                <section id="socialLoginForm">
                    @*@Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl })*@
                </section>
            </div>
            <!-- /.social-auth-links -->

            <p class="mb-1">
                <a href="@Url.RouteUrl("ForgotPasswd")">Forgot your password?</a>
            </p>
            <p class="mb-0">
                <a href="@Url.RouteUrl("Register")" class="text-center">Register a new membership</a>
            </p>
        </div>
        <!-- /.login-card-body -->
    </div>
</div>

<div class="modal fade" id="modal-danger" tabindex="-1" role="dialog" data-keyboard="false" data-backdrop="static">
    <div class="modal-dialog">
        <div class="modal-content bg-danger">
            <div class="modal-header">
                <h4 class="modal-title">Authentication Failed !</h4>
            </div>
            <div class="modal-body">
                @TempData["ErrorMessage"]
            </div>
            <div class="modal-footer justify-content-between">
                <button type="button" class="btn btn-outline-light" data-dismiss="modal">OK</button>
            </div>
        </div>
    </div>
</div>

<script type="text/javascript">
    function ShowErrorPopup() {
        $("#modal-danger").modal();
    }
</script>
@if (ViewBag.JavaScriptFunction != null)
{
    <script type="text/javascript">
            @Html.Raw(ViewBag.JavaScriptFunction)
    </script>
}
Posted
Updated 22-Jul-21 9:04am
Comments
[no name] 6-Mar-20 5:16am    
Hi Please change name of action method "Index" to "Login"

// Route to Login.
routes.MapRoute(
name: "Login",
url: "login/",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
gcogco10 6-Mar-20 5:18am    
Thanks

1 solution

As mentioned in comments, change Index to Login in your route.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900