asp.net - MVC5: Login form in Layout page -
i'm quite new mvc please me understand how following. know when create new mvc5 project wants use login page separate page when want log in (i.e. _loginpartial view actionlink login controller returns view).
what i'm trying accomplish have login form throughout whole site (when user not logged in yet) did following changes:
_layout view:
@html.partial("_loginpartial")
_loginpartial view:
using (html.beginform("login", "account", new { returnurl = request.querystring["returlurl"] }, formmethod.post, new { @class = "navbar-form navbar-right form-inline", role = "form" })) { @html.antiforgerytoken() <div class="form-group"> @html.textboxfor(m => m.username, new { @class = "form-control input-sm", placeholder = "username" }) @html.passwordfor(m => m.password, new { @class = "form-control input-sm", placeholder = "password" }) </div> <input type="submit" value="log in" class="btn btn-default btn-sm" /> }
look it's working fine when username/password exists, logs user in , redirects him home page when returnurl not found in querystring. however, when fails log in loads original login view separate page because login controller returns full view:
if (modelstate.isvalid) { var user = await usermanager.findasync(model.username, model.password); if (user != null) { await signinasync(user, model.rememberme); return redirecttolocal(returnurl); } else { modelstate.addmodelerror("", "invalid username or password."); } } // if got far, failed, redisplay form return view(model);
i don't want that. want have login form on pages , able log in page , show errors on page user on instead of redirecting him original login page. how without resorting javascript/ajax?
thank much!
this because returnurl account/login. has been set in web.config
<forms loginurl="~/account/login" timeout="2880" /> if (user != null) { await signinasync(user, model.rememberme); return redirecttolocal(returnurl); }
so, either change loginurl default page or in html.beginform().
returnurl = httpcontext.current.request.rawurl
it gets current requested page , sets returnurl.
using (html.beginform("login", "account", new { returnurl = httpcontext.current.request.rawurl }, formmethod.post, new { @class = "navbar-form navbar-right form-inline", role = "form" })) { //your code }
Comments
Post a Comment