【发布时间】:2022-02-13 15:43:27
【问题描述】:
块引用
我有“登录”视图和具有多个条件的控制器,任何条件都返回一个视图。但我的“登录”控制器仅在一个视图中。所以,我想返回条件而不是页面刷新或重新加载。有人可以帮助并提供我的代码吗? 我应该在视图中更改什么?或者我应该添加什么? 控制器代码:
[HttpPost]
[AllowAnonymous]
public virtual async Task<ActionResult> Login(LoginViewModel model, string ReturnUrl = "")
{
if (!ModelState.IsValid)
{
ViewBag.ErrorMessage = "لطفا فلید های * دار را کامل کنید.";
return View("Login");
}
//اگرعدد ها را فارسی وارد کند آن ها رو به انگلیسی تبدیل می کنیم
var UserName = Helper.Helper.NumberFN_To_EN(model.UserName);
var Password = Helper.Helper.NumberFN_To_EN(model.Password);
// به دنبال کاربری با نام کاربر وارد شده میگردیم
var user = await _userManager.FindByNameAsync(UserName).ConfigureAwait(false);
var isUserPasswordCorrect = false;
// اگر کاربر وجود داشت
if (user != null)
{
isUserPasswordCorrect = await _userManager.CheckPasswordAsync(user, Password).ConfigureAwait(false);
// اگر کاربر رمزش را درست وارد کرده بود
if (isUserPasswordCorrect)
{
// اگر کاربر غیر فعال کامل یا غیر فعال
if (user.IsDisabled)
{
ViewBag.ShowSupport = true;
ViewBag.ErrorMessage = "حساب کاربری شما غیرفعال میباشد لطفا با پشتیبان سایت در تماس باشید";
return View();
}
// اگر هیچ نقشی نداشت
// جلوی ورود او را میگیریم
if (!user.Roles.Any())
{
ViewBag.ShowSupport = true;
ViewBag.ErrorMessage = "کاربر گرامی! شما در سیستم هیچ پستی ندارید";
return View();
}
}
}
var result = SignInStatus.Failure;
if (user != null)
{
// آیا کاربر رمز عبورش را درست وارد کرده است ؟
if (isUserPasswordCorrect)
{
// عملیات لاگین را انجام میدهیم
result = await _signInManager
.PasswordSignInAsync(UserName, Password, true, true)
.ConfigureAwait(false);
}
}
// نتیجه عملیات لاگین
switch (result)
{
// اگر ورود موفقیت آمیز بود
case SignInStatus.Success:
//اطلاعات لازم رو میگیریم و یه لاگ برای کاربر ثبت میشود
_logService.Add(new Log { UserId = user.Id, IP = Request.UserHostAddress, LogType = LogType.Login, CreatedDate = DateTime.Now });
_uow.SaveAllChanges();
var roleuser = await _applicationRoleManager.FindByIdAsync(user.Roles.SingleOrDefault().RoleId).ConfigureAwait(false);
if (string.IsNullOrWhiteSpace(ReturnUrl))
{
ReturnUrl = AuthenticationHelper.GetDashboardForRole(roleuser.Name);
}
else
{
if (!Url.IsLocalUrl(ReturnUrl))
{
ReturnUrl = AuthenticationHelper.GetDashboardForRole(roleuser.Name);
}
}
return Redirect(ReturnUrl);
// اگر اکانت قفل شده است
case SignInStatus.LockedOut:
// زمان رفع محدودیت کاربر برای ورود
// زمان خروجی
// UTC
// است پس آن را به تاریخ عادی تبدیل می کینم
var theTimeOfUnBanUser = user.LockoutEndDateUtc.Value.UtcToLocalTime().ToString("HH:mm:ss");
ViewBag.ShowSupport = true;
ViewBag.ErrorMessage = $"حساب کاربری شما قفل شده است، لطفا بعد از ساعت {theTimeOfUnBanUser} دوباره تلاش نمایید";
return View();
// اگر نام کاربری یا رمز عبور اشتباه است
case SignInStatus.Failure:
default:
// اگر نام کاربری وارد شده صحیح بود
if (user != null)
{
// تعداد حداکثر تلاش برای ورود ناموفق
var maxFailedAccessAttemptsBeforeLockout = _userManager.MaxFailedAccessAttemptsBeforeLockout;
// تعداد ورود های ناموفق کاربر جاری
var accessFailedCount = await _userManager.GetAccessFailedCountAsync(user.Id).ConfigureAwait(false);
// تعداد تلاش مانده برای ورود
var numberOfAttemptsLeft = maxFailedAccessAttemptsBeforeLockout - accessFailedCount;
ViewBag.ShowSupport = true;
ViewBag.ErrorMessage = "رمز عبور اشتباه است" + System.Environment.NewLine + $"تعداد دفعات تلاش مجدد برای ورود {numberOfAttemptsLeft} بار";
return View();
}
else
{
ViewBag.ShowSupport = true;
ViewBag.ErrorMessage = "نام کاربری یا رمز عبور صحیح نمی باشد";
return View();
}
}
}
【问题讨论】:
-
谷歌搜索; "ajax 局部视图 mvc"
标签: javascript html jquery asp.net-mvc