Asp.net mvc 对某些字段禁用验证

Asp.net mvc 对某些字段禁用验证,asp.net-mvc,validation,Asp.net Mvc,Validation,我有一个ViewModel,用于添加具有属性的用户:Email、Password、ConfirmPassword以及所有属性上的必需属性。编辑用户时,我希望不需要密码和ConfirmPassword属性 有没有一种方法可以在不同的控制器操作中禁用对某些属性的验证,还是最好创建一个单独的EditViewModel?我喜欢将其分解,并为每个视图创建一个包含所有公共数据和层次的基础模型: class UserBaseModel { int ID { get; set; } [Requ

我有一个ViewModel,用于添加具有属性的用户:Email、Password、ConfirmPassword以及所有属性上的必需属性。编辑用户时,我希望不需要密码和ConfirmPassword属性


有没有一种方法可以在不同的控制器操作中禁用对某些属性的验证,还是最好创建一个单独的EditViewModel?

我喜欢将其分解,并为每个视图创建一个包含所有公共数据和层次的基础模型:

class UserBaseModel
{
    int ID { get; set; }

    [Required]
    string Name { get; set; }       

    [Required]
    string Email { get; set; }               
    // etc...
}

class UserNewModel : UserBaseModel
{
    [Required]
    string Password { get; set; }

    [Required]
    string ConfirmPassword { get; set; }
}

class UserEditModel : UserBaseModel
{
    string Password { get; set; }
    string ConfirmPassword { get; set; }
}

有兴趣知道是否还有更好的方法,尽管这种方法看起来非常干净灵活。

您可以编写一个自定义属性来测试条件,并允许或不允许空字段

下面是我为大家准备的一个简单的演示。您需要修改以适应您的目的/

    using System.ComponentModel.DataAnnotations;

    namespace CustomAttributes

    {

    [System.AttributeUsage(System.AttributeTargets.Property)]

    public class MinimumLength : ValidationAttribute

    {
        public int Length { get; set; }
        public MinimumLength()
        {
        }

        public override bool IsValid(object obj)
        {
            string value = (string)obj;
            if (string.IsNullOrEmpty(value)) return false;
            if (value.Length < this.Length)
                return false;
            else
                return true;
        }
    }
}
控制器

 [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Application b)
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    if (ModelState.IsValid)
    {
        return RedirectToAction("MyOtherAction");
    }
    return View(b);
}

enter code here

问题是,我希望该字段在一个控制器操作中是必需的,但在另一个控制器操作中不是必需的,有没有办法让自定义属性知道它当前在哪个操作中?是的,有,你需要搜索它,因为我现在想不起来。这可能对你有帮助。
 [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Application b)
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    if (ModelState.IsValid)
    {
        return RedirectToAction("MyOtherAction");
    }
    return View(b);
}

enter code here