我有一个控制器,它以一个模型为参数。此模型是通用模型的专门版本。我希望我的专门模型隐藏一个所需的基本字段,以使它不需要。
以下是我所做的:
控制器
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);
}
}GenericModel
public class GenericModel
{
[Required(ErrorMessage = "The field is required.")]
public string SomeValue { get; set; }
}SpecializedModel
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>当我验证表单时,错误消息
这个领域是必需的。
会显示出来。我想RequiredAttribute还保存着..。有办法摆脱它吗?
编辑:我还试图让SomeValue成为一个虚拟字段来覆盖它,但问题是一样的。
发布于 2017-06-06 12:34:57
从视图中移除这一行
@Html.ValidationMessageFor(型号=> model.SomeValue)
发布于 2017-06-06 14:12:38
那么,您的根本问题是您在代码中其他地方不希望在域对象上有属性/属性/字段吗?
这就是为什么存在像AutoMapper或其他映射器这样的库(甚至自己编写它,但这是耗时和重复的)。
每个域层(UI、业务逻辑、数据存储)都应该有一个域对象,并且每个域层都不应该相互引用域对象。相反,您可以使用数据传输对象(DTO)在层之间映射值。
https://stackoverflow.com/questions/44390090
复制相似问题