我有一个控制器,它将模型作为参数。此模型是通用模型的专用版本。我希望我的专业模型隐藏所需的基本字段,使其不是必需的。
这是我做的:
控制器
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
虚拟字段覆盖它,但问题是一样的。
答案 0 :(得分:0)
从视图中删除此行
@ Html.ValidationMessageFor(model =&gt; model.SomeValue)
答案 1 :(得分:0)
您的基础问题是您在域对象上有属性/属性/字段,而您在代码中的其他域对象上不需要这些属性/属性/字段吗?
这就是为什么存在AutoMapper或其他地图制作器等库(甚至自己编写,但这很耗时且重复)的原因。
每个域层(UI,业务逻辑,数据存储)应该有一个域对象,每个域层都不应该引用其他域对象。相反,您将使用数据传输对象(DTO)在图层之间映射值。