【问题标题】:mvc duplicate user validation errormvc重复用户验证错误
【发布时间】:2014-11-11 19:53:15
【问题描述】:

我怎样才能创建一个验证,我只能创建一个具有该名称的用户

我的代码

这是

  [HttpPost]
        public ActionResult Create(Klant klant)
        {
            ModelState.AddModelError("Firma", "Firma already exists");  

            if (ModelState.IsValid)
            {

                db.Klanten.Add(klant);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(klant);
        }

现在我可以创建 0 个用户,因为我的 addmodelerror 总是出现错误公司已经存在

【问题讨论】:

    标签: c# visual-studio-2012 model-view-controller visual-studio-2013 asp.net-mvc-validation


    【解决方案1】:

    首先,检查您的模型状态是否有效。如果不是,让用户知道有一些无效字段。

    如果有效,请检查该用户名是否已经存在,如果存在,则返回带有您添加的模型错误的模型:

    public ActionResult Create(Klant klant)
    {
        if (ModelState.IsValid)
        {
            if(db.Klanten.Any(k => k.Username == klant.Username)
               ModelState.AddModelError("Firma", "Firma already exists");
            else
            {
               db.Klanten.Add(klant);
               db.SaveChanges();
               return RedirectToAction("Index");
            }
        }
    
        return View(klant);
    }
    

    这种方法对用户更友好,因为他们可能遇到的最后一个错误是用户名已被占用,他们只需要更改即可。

    【讨论】:

      【解决方案2】:

      我知道这个答案很晚,但我很乐意与新观众分享。 而且我知道这种方法与其他答案相同,但我认为它更干净,更易于维护:

      [HttpPost]
      [ValidateAntiForgeryToken]
      public ActionResult Create(Klant klant)
      {
          if (!ModelState.IsValid)
              return View(klant);
      
          if (db.Klanten.Any(k => k.Username == klant.Username)
          {
              ModelState.AddModelError("Firma", "Firma already exists");
              return View(klant);
          }
      
          db.Klanten.Add(klant);
          db.SaveChanges();
          return RedirectToAction("Index");
      }
      

      并且不要忘记在Action Method和@Html.AntiForgeryToken()上方添加[ValidateAntiForgeryToken];在表单内的剃刀视图中。以防止黑客攻击。这是一个操作过滤器,除非请求包含有效的防伪令牌,否则对应用了此过滤器的操作发出的请求会被阻止。

      您可以在本文中阅读有关防伪令牌的更多信息 https://www.c-sharpcorner.com/blogs/validateantiforgerytoken-attribute-in-asp-net-mvc

      【讨论】:

        【解决方案3】:

        ModelState.AddModelError("Firma", "Firma already exists");  
        

        在“if”之后和return语句之前

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-03
          • 2016-06-02
          • 2018-04-10
          • 1970-01-01
          • 1970-01-01
          • 2013-10-02
          • 2018-09-01
          • 1970-01-01
          相关资源
          最近更新 更多