C# 如何删除继承的ValidationAttribute?
我有一个以模型为参数的控制器。此模型是通用模型的专用版本。我希望我的专用模型隐藏一个必需的基本字段,使其成为非必需的 以下是我所做的: 控制器C# 如何删除继承的ValidationAttribute?,c#,asp.net-mvc,validationattribute,C#,Asp.net Mvc,Validationattribute,我有一个以模型为参数的控制器。此模型是通用模型的专用版本。我希望我的专用模型隐藏一个必需的基本字段,使其成为非必需的 以下是我所做的: 控制器 public class TestController : Controller { [HttpGet] public ActionResult Index() { return View(new SpecializedModel()); } [HttpPost] public Actio
public class TestController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new SpecializedModel());
}
[HttpPost]
public ActionResult Index(SpecializedModel model)
{
if(ModelState.IsValid)
{
//Do some stuff, eventually redirect elsewhere
}
return View(model);
}
}
通用模型
public class GenericModel
{
[Required(ErrorMessage = "The field is required.")]
public string SomeValue { get; set; }
}
public class SpecializedModel : GenericModel
{
new public string SomeValue { get; set; }
}
专业化模型
public class GenericModel
{
[Required(ErrorMessage = "The field is required.")]
public string SomeValue { get; set; }
}
public class SpecializedModel : GenericModel
{
new public string SomeValue { get; set; }
}
查看
<form method="post">
@Html.TextBoxFor(model => model.SomeValue)<br />
@Html.ValidationMessageFor(model => model.SomeValue)<br />
<input type="submit" />
</form>
@Html.TextBoxFor(model=>model.SomeValue)
@Html.ValidationMessageFor(model=>model.SomeValue)
当我验证表单时,错误消息
该字段为必填字段
如图所示。我收集到RequiredAttribute
被保留。。。有办法摆脱它吗
编辑:我还试图使
SomeValue
成为一个虚拟字段来覆盖它,但问题是相同的。从视图中删除这一行
@Html.ValidationMessageFor(model=>model.SomeValue)从视图中删除此行
@Html.ValidationMessageFor(model=>model.SomeValue)那么,您的根本问题是在域对象上有属性/属性/字段,而您不希望在代码中的其他域对象上有这些属性/属性/字段吗 这就是为什么存在诸如AutoMapper或其他映射器之类的库(甚至可以自己编写,但这既耗时又重复)
每个域层(UI、业务逻辑、数据存储)都应该有一个域对象,每个域层都不应该引用其他域对象。相反,您应该使用数据传输对象(DTO)在层之间映射值。那么,您的根本问题是您在域对象上有属性/属性/字段,而您不希望在代码中的其他域对象上有这些属性/属性/字段吗 这就是为什么存在诸如AutoMapper或其他映射器之类的库(甚至可以自己编写,但这既耗时又重复)
每个域层(UI、业务逻辑、数据存储)都应该有一个域对象,每个域层都不应该引用其他域对象。相反,您应该使用数据传输对象(DTO)在层之间映射值。如果您在
GenericModel
中定义了SomeValue
,则在尝试继承模型时引用此选项,为什么需要再次在其他模型中定义它,例如,SpecializedModel
@GauravKP我不尝试继承Model
——我这里有某种视图模型。而SpecializedModel
中的SomeValue
已“定义”以覆盖它。是否要忽略“SomeValue”验证error@gobesEF用于将模型注释与表列绑定,所以,如果您想遵循EF,您需要跳过继承模型中的重复列,即SpecializedModel
,现在如果您需要的是视图模型(数据库中不存在该表),请尝试通过删除ValidationMessageFor
以自定义方式进行处理,在您尝试继承模型时引用此项,如果您在GenericModel
中定义了SomeValue
,为什么需要在其他模型中再次定义它,即SpecializedModel
@GauravKP我不尝试继承模型
——我这里有某种视图模型。而SpecializedModel
中的SomeValue
已“定义”以覆盖它。是否要忽略“SomeValue”验证error@gobesEF用于将模型注释与表列绑定,所以,如果您想遵循EF,您需要跳过继承模型中的重复列,即SpecializedModel
,现在如果您需要的是视图模型(数据库中不存在该模型的表),请尝试通过删除ValidationMessageFor
以自定义方式进行处理,这是。。。一个过于简单的答案。我已经为我的测试放了ValidationMessage,真正的控制器代码有一个if(ModelState.IsValid)
语句。那就是。。。一个过于简单的答案。我已经为我的测试放置了ValidationMessage,真正的控制器代码有一个if(ModelState.IsValid)
语句。