【发布时间】:2012-04-19 09:51:03
【问题描述】:
我想在保存子模型 (VehicleModel) 时“关闭”父模型 (VehicleManufacturer) 的某个属性的必填字段验证,即:
public class VehicleManufacturer
{
public virtual Guid Id { get; set; }
[Required]
[StringLength(50, MinimumLength = 1)]
public virtual string Name { get; set; }
}
public class VehicleModel
{
public virtual Guid Id { get; set; }
[Required]
[StringLength(50, MinimumLength = 1)]
public virtual string Name { get; set; }
public virtual VehicleManufacturer Manufacturer { get; set; }
}
所以,当我保存一个新模型时,我只关心它的名称和制造商 ID,它们可以从下拉列表中选择,但是,因为制造商名称在其实体中标记为 [必需],它保存新的 VehicleModel 时使我的 ModelState 无效,因为 ManufacturerName 为 null :(
我想知道最好的方法是什么以及如何做到这一点。 我可以想到一些解决方案,但似乎都不是正确的方法:
- 在 ModelState 检查之前设置一个“默认”ManufacturerName 值,即 "-" 只是为了满足 DataAnnotation
- 填充制造商名称 和我的 VehicleModelView 中的 ManufacturerId - 如果你的父母不好 模型有一堆必填字段,你真的不需要在 子模型
- 关闭子模型的 [必需] 验证(不确定 怎么样?)
你怎么看?
【问题讨论】:
-
我猜你的模型是实体框架模型?这就是为什么您不应该使用实体模型作为视图模型的原因。 ViewModels 应该是特定的每个视图。然后你可以对不同的屏幕进行不同的验证。
标签: asp.net-mvc asp.net-mvc-3 data-annotations