Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何删除继承的ValidationAttribute?_C#_Asp.net Mvc_Validationattribute - Fatal编程技术网

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)
语句。