首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除继承的ValidationAttribute?

如何删除继承的ValidationAttribute?
EN

Stack Overflow用户
提问于 2017-06-06 12:32:05
回答 2查看 243关注 0票数 1

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

以下是我所做的:

控制器

代码语言:javascript
复制
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

代码语言:javascript
复制
public class GenericModel
{
    [Required(ErrorMessage = "The field is required.")]
    public string SomeValue { get; set; }
}

SpecializedModel

代码语言:javascript
复制
public class SpecializedModel : GenericModel
{
    new public string SomeValue { get; set; }
}

视图

代码语言:javascript
复制
    <form method="post">
        @Html.TextBoxFor(model => model.SomeValue)<br />
        @Html.ValidationMessageFor(model => model.SomeValue)<br />
        <input type="submit" />
    </form>

当我验证表单时,错误消息

这个领域是必需的。

会显示出来。我想RequiredAttribute还保存着..。有办法摆脱它吗?

编辑:我还试图让SomeValue成为一个虚拟字段来覆盖它,但问题是一样的。

EN

回答 2

Stack Overflow用户

发布于 2017-06-06 12:34:57

从视图中移除这一行

@Html.ValidationMessageFor(型号=> model.SomeValue)

票数 0
EN

Stack Overflow用户

发布于 2017-06-06 14:12:38

那么,您的根本问题是您在代码中其他地方不希望在域对象上有属性/属性/字段吗?

这就是为什么存在像AutoMapper或其他映射器这样的库(甚至自己编写它,但这是耗时和重复的)。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44390090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档