【问题标题】:Displaying html code on browser when model state is not valid?模型状态无效时在浏览器上显示 html 代码?
【发布时间】:2013-02-16 06:08:03
【问题描述】:

我有一个登录表单,用户可以通过它登录我的应用程序。如果登录失败,则向客户端显示错误消息。

为此,我的控制器有这两个功能:-

      [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);
    }

当用户输入错误的登录信息时,我在模型状态中添加了错误,然后使用正确的消息再次向客户显示视图。

但我的问题是它在浏览器上显示 html 代码,而不是在模型状态无效时呈现代码。

为什么会出现这些,我找不到任何解决方案。

【问题讨论】:

  • 您的意思是显示<b>BOLD</b> 而不是BOLD?你能知道如何在你的视图中显示验证摘要吗?
  • 你能再澄清一点吗?

标签: asp.net-mvc asp.net-mvc-4 nopcommerce


【解决方案1】:

您所描述的问题是您视图中的问题,而不是您的控制器中的问题。如果您的 html 在属性中,那么您需要使用 @Html.Raw(Model.SomeProperty) 以免对其进行编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2020-04-17
    • 2023-03-13
    相关资源
    最近更新 更多