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