我有Category个模型,有名称字段,每个类别的名称必须是唯一的.我已经做了验证,当我try 创建新类别时,它可以工作,但我在try 编辑它时遇到了问题.现在,它只是判断名称是否存在,当然,当我试图编辑同一个类别时,它确实存在.

模型

[Validator(typeof(CategoryValidator))]
public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
    virtual public ICollection<Image> Images { get; set; }
}

public class CategoryValidator : AbstractValidator<Category>
{
    public CategoryValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("Category name is required.").Must(UniqueName).WithMessage("This category name already exists.");
    }

    private bool UniqueName(string name)
    {
        ProjecteDataContext _db = new ProjecteDataContext();
        var category = _db.Categories.Where(x => x.Name.ToLower() == name.ToLower()).SingleOrDefault();

        if (category == null) return true;
        return false;
    }
}

正如你们所看到的,我有UniqueName(string name)个函数,但我如何传递ID,或者整个模型,这样我就可以判断它是否和我试图编辑的模型的ID相同,然后传递.我怎么能通过像UniqueName(string name, int? id)这样的考试呢?我今天才发现了FluentValidation,我搞不懂.

推荐答案

Predicate Validator (aka Must)有一个重载,它接受带有两个参数(已验证对象和属性值)的谓词.在本例中,谓词的类型为Func<Category, string, bool>.因此,只需将Category参数添加到您的唯一名称验证方法中:

private bool UniqueName(Category category, string name)
{
        ProjecteDataContext _db = new ProjecteDataContext();
        var dbCategory = _db.Categories
                            .Where(x => x.Name.ToLower() == name.ToLower())
                            .SingleOrDefault();

        if (dbCategory == null) 
            return true;

        return dbCategory.ID == category.ID;
}

Asp.net相关问答推荐

Visual Studio发布的网站得到错误类型JObject is not defined when page is load on server"''"

如何从 dll 文件中提取类的源代码?

带有模型的 mvc 上传文件 - 第二个参数发布的文件为空

Azure 自定义控制器/API .Net 后端

HttpResponse 的区别:SetCookie、AppendCookie、Cookies.Add

威胁已经被清除了

asp.net:与其中的用户控件相比,控件/页面的页面生命周期顺序是什么?

如何使用 json 将复杂类型传递给 ASP.NET MVC 控制器

如何使用三个按钮是否和取消显示确认alert ,如 MS Word 中所示

将存储过程中 Select 查询的结果返回到列表

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

ASP.NET MVC 5 中的路由可选参数

每个 'HttpRequest' 在 ASP.NET 中都有自己的线程吗?

用于验证的数据注释,至少一个必填字段?

如何判断用户代理是 ipad 还是 iphone?

如何保护存储在 web.config 中的密码?

MVC 模型布尔显示是或否

解析器错误:此处不允许使用_Default,因为它没有扩展类System.Web.UI.Page和 MasterType 声明

IronRuby死了吗?

如何在服务器控件属性中使用 ASP.NET <%= 标签?