Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
Asp.net mvc 3 MVC3用于两种情况的同一视图模型,在一种情况下仅具有必需属性_Asp.net Mvc 3_Validation - Fatal编程技术网

Asp.net mvc 3 MVC3用于两种情况的同一视图模型,在一种情况下仅具有必需属性

Asp.net mvc 3 MVC3用于两种情况的同一视图模型,在一种情况下仅具有必需属性,asp.net-mvc-3,validation,Asp.net Mvc 3,Validation,我有一个模型。像这样的 public class ViewModel { public int Id { get; set; } public int? Value { get; set; } } 我有一个现有ViewModels的表,下面有一个表单,您可以在其中添加新的ViewModel 对于从DB获取的现有ViewModel,我不希望对Value属性进行验证,但是对于添加新ViewModel的情况,我希望进行必要的验证。。。。实际模型比这个模型更复杂,所以我想在这两种情况下使用

我有一个模型。像这样的

public class ViewModel
{
   public int Id { get; set; }
   public int? Value { get; set; }
}
我有一个现有ViewModels的表,下面有一个表单,您可以在其中添加新的ViewModel

对于从DB获取的现有ViewModel,我不希望对Value属性进行验证,但是对于添加新ViewModel的情况,我希望进行必要的验证。。。。实际模型比这个模型更复杂,所以我想在这两种情况下使用相同的模型。。可能吗

编辑:这很有效

public class AddNewViewModel : ViewModel
{
    public new int Value { get; set; }
}

使用
new
virtual/override
更好吗?为什么?

将必需的属性编译到类中。你可以这样做:

public class BaseViewModel
{
   public int Id { get; set; }
   public virtual int? Value { get; set; }
}

public class CreateViewModel : BaseViewModel
{
   [Required]
   public override int? Value { get; set; }
}

这样,您只需在需要的属性中添加验证属性。

您可以使用new关键字而不是virtual或override,但我认为在这种情况下不会出现多态性。因此,如果将AddNewViewModel强制转换为ViewModel,则AddNewViewModel中的值将不会进入新强制转换的ViewModel中。这不是问题,我不会将AddNewViewModel放入ViewModel集合中,它是父ViewModel上自己的属性。。问题是,如果我用new关键字的解决方案比用override关键字的好,我认为new应该可以,但我修改了你的问题来问这个,因为我不确定。我尽量避免使用新的,因为对我来说它有味道,但这可能只是我的观点,不一定是“正确的”。这正是我所做的,使用我的编辑D编辑:不确切地说,你是用覆盖物做的。我想我在写我的答案,而你在写编辑。我看到后加了评论。