0

ユーザーが自分のアプリケーションにログインできるログインフォームが1つあります。ログインに失敗した場合は、エラーメッセージをクライアントに表示します。

このために私のコントローラーはこの2つの機能を持っています:-

      [NopHttpsRequirement(SslRequirement.Yes)]
     public ActionResult Login(bool? checkoutAsGuest)
     {
        if (_workContext.CurrentCustomer.IsRegistered())
        {
            if (Request.QueryString["returnUrl"]!=null)
            {
                return Redirect(Convert.ToString(Request.QueryString["returnUrl"]));
            }

        }

        var model = new LoginModel();
        model.UsernamesEnabled = _customerSettings.UsernamesEnabled;
        model.CheckoutAsGuest = checkoutAsGuest.HasValue ? checkoutAsGuest.Value : false;
        model.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnLoginPage;
        return View(model);
    }

    [HttpPost]
    [CaptchaValidator]
    public ActionResult Login(LoginModel model, string returnUrl, bool captchaValid)
    {
        //validate CAPTCHA
        if (_captchaSettings.Enabled && _captchaSettings.ShowOnLoginPage && !captchaValid)
        {
            ModelState.AddModelError("", _localizationService.GetResource("Common.WrongCaptcha"));
        }

        if (ModelState.IsValid)
        {
            if (_customerSettings.UsernamesEnabled && model.Username != null)
            {
                model.Username = model.Username.Trim();
            }
            bool Active = true;
            if (_customerRegistrationService.ValidateCustomer(_customerSettings.UsernamesEnabled ? model.Username : model.Email, model.Password, out  Active))
            {
                var customer = _customerSettings.UsernamesEnabled ? _customerService.GetCustomerByUsername(model.Username) : _customerService.GetCustomerByEmail(model.Email);

                //migrate shopping cart
                _shoppingCartService.MigrateShoppingCart(_workContext.CurrentCustomer, customer);

                //sign in new customer
                _authenticationService.SignIn(customer, model.RememberMe);


                if (!String.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl))
                {

                    if (Request.QueryString["returnUrl"].ToString().Contains("search?q"))
                    {

                        string url = returnUrl;
                        if (Request.QueryString["select"] != null)
                            url = url + "&select=" + Request.QueryString["select"].ToString();

                        if (Request.QueryString["startdate"] != null)
                            url = url + "&startdate=" + Request.QueryString["startdate"].ToString();


                        if (Request.QueryString["enddate"] != null)
                            url = url + "&enddate=" + Request.QueryString["enddate"].ToString();

                        if (Request.QueryString["s_loc"] != null)
                            url = url + "&s_loc=" + Request.QueryString["s_loc"].ToString();

                        return Redirect(url);
                        // return Redirect(returnUrl + "&select=" + Request.QueryString["select"] == null ? "" : Request.QueryString["select"].ToString() + "&startdate=" + Request.QueryString["startdate"] == null ? "" : Request.QueryString["startdate"].ToString() + "&enddate=" + Request.QueryString["enddate"] == null ? "" : Request.QueryString["enddate"].ToString() + "&s_loc=" + Request.QueryString["s_loc"] == null ? "" : Request.QueryString["s_loc"].ToString());

                    }

                    return Redirect(returnUrl);

                }
                else
                    return RedirectToRoute("HomePage");
            }
            else
            {

                if (!Active)
                    ModelState.AddModelError("", _localizationService.GetResource("Account.Login.AccountNotactive"));
                else
                    ModelState.AddModelError("", _localizationService.GetResource("Account.Login.WrongCredentials"));
            }
        }

        //If we got this far, something failed, redisplay form
        model.UsernamesEnabled = _customerSettings.UsernamesEnabled;
        model.DisplayCaptcha = _captchaSettings.Enabled && _captchaSettings.ShowOnLoginPage;
        return View(model);
    }

ユーザーが間違ったログインの詳細を入力すると、モデルの状態にエラーが追加され、適切なmsgを使用してビューが顧客に再度表示されます。

しかし、私の問題は、モデルの状態が有効でない場合にコードをレンダリングせずに、ブラウザーにhtmlコードを表示することです。

なぜこれらが発生するのか、私はそれに対する解決策を見つけることができません。

4

1 に答える 1

2

説明している問題は、コントローラーではなく、ビューの問題です。HTMLがプロパティにある場合は、エンコードされないようにするために@ Html.Raw(Model.SomeProperty)を使用する必要があります。

于 2013-02-17T17:51:15.723 に答える