ASP.NET MVC应用程序中的不同验证操作

时间:2016-08-07 15:47:21

标签: validation asp.net-core asp.net-core-mvc

我正在尝试实现简单的CMS。我有Page个类实例,我想将它们添加到数据库中,也可以编辑它们。 UrlName中的Page应该是唯一的,因此我制作了自定义验证器,但在编辑时我无法在不将UrlName更改为不存在的情况下提交表单。如何将额外数据传递给我的VerifyUrl,或者还有其他方法可以解决这个问题?

public class Page : IUpdatable<Page>
{
    public int ID { get; set; }
    [Required]
    [DataType(DataType.Url)]
    [Remote(action: "VerifyUrl", controller: "Pages")]
    public string UrlName { get; set; }
}

这是PagesController

中的验证方法
public JsonResult VerifyUrl(string UrlName)   
{
    if (!db.Pages.Any(x => x.UrlName.Equals(UrlName)) )
         return Json(data: true);
    return Json(data: "This Url is already in use");
}

这是我的观点

<input asp-for="UrlName" class="form-control" />
<span asp-validation-for="UrlName" class="text-danger" />

2 个答案:

答案 0 :(得分:0)

在Remote ErrorMessage和Action Mehtod中指定“此URL已在使用中”,如果提供的URL已经是“使用”,则在Json中返回false。

模型类

[DisplayName("URL")]
   [Required]
   [Remote("Validate", "Home", HttpMethod = "Post", ErrorMessage = "This URL already exists")]
   public string URL { get; set; }

在您的控制器中

   [HttpPost]
    public ActionResult Validate(string URL)
    {
       //Do validation here from DataBas
        //if URL already exist, return false, else true;

            return Json(false);

    }

<强> Working Demo

要将其他信息传递给控制器​​方法,可以将远程属性中的附加字段指定为:

     [DisplayName("User name")]
     [Required]
      public string UserName { get; set; }

      [DisplayName("URL")]
      [Required]
      [Remote("Validate", "Home", HttpMethod = "Post",AdditionalFields="UserName", ErrorMessage = "This URL and Username should not be same")]
     public string URL { get; set; }


 [HttpPost]
    public ActionResult Validate(string URL, string UserName)
    {
        if(URL == UserName)
            return Json(false);
        else
            return Json(true);

    }

<强> Woking Demo for additional field

答案 1 :(得分:0)

您是否允许用户在编辑帖子时更改网址?如果不是,我会创建单独的视图模型,一个用于“新帖子”,另一个用于“编辑帖子”。

New Post View Model可以调用验证方法。编辑时,只要您不允许用户更改UI中的URL,您就不需要重新验证它。