如何删除继承的ValidationAttribute?

时间:2017-06-06 12:32:06

标签: c# asp.net-mvc validationattribute

我有一个控制器,它将模型作为参数。此模型是通用模型的专用版本。我希望我的专业模型隐藏所需的基本字段,使其不是必需的。

这是我做的:

控制器

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虚拟字段覆盖它,但问题是一样的。

2 个答案:

答案 0 :(得分:0)

从视图中删除此行

@ Html.ValidationMessageFor(model =&gt; model.SomeValue)

答案 1 :(得分:0)

您的基础问题是您在域对象上有属性/属性/字段,而您在代码中的其他域对象上不需要这些属性/属性/字段吗?

这就是为什么存在AutoMapper或其他地图制作器等库(甚至自己编写,但这很耗时且重复)的原因。

每个域层(UI,业务逻辑,数据存储)应该有一个域对象,每个域层都不应该引用其他域对象。相反,您将使用数据传输对象(DTO)在图层之间映射值。