【问题标题】:How to return multiple views without being page reloaded?如何在不重新加载页面的情况下返回多个视图?
【发布时间】: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


【解决方案1】:

您必须使用 ajax 调用并将一些 json 从服务器发送到客户端,然后根据 IsSuccess、Message、DefaultPageUrl 和 ...等 json 属性做出决策。 这可以帮助你:https://www.infinetsoft.com/Post/How-to-implement-Login-using-Ajax-in-asp-net-mvc/2469

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 1970-01-01
    相关资源
    最近更新 更多