我有一个视图&我用于编辑和插入页面一个记录的模型.业务需求之一是编辑需要某个字段,而不是新的.最初在这个特殊功能之前添加到这个文件夹中,我有这样的模型:
[required(ErrorMessage = "*")] [Range(0.0,(double)decimal.MaxValue)] [DisplayName("Cost")] [DisplayFormat(DataFormatString = "{0:d}",ApplyFormatInEditMode = true)] public decimal ProposedCost { get; set; }
我想要删除必需的属性,如果它是一个插入的表单,或添加它,如果一个编辑表单.什么是更好的方法?我所有的其他验证都是像上面那样完成.还是可以改变模型状态?思考?
编辑
我应该澄清的是,他们仍然被允许在新的,只是不需要的时候插入成本.
解决方法
如果您使用的是MVC3 / .NET4,则可以使用专门用于此目的的IValidatableObject.
报价ScottGu,
…The IValidatableObject interface enables you to perform model-level
validation,and enables you to provide validation error messages
specific to the state of the overall model….
你的模型看起来像
public class Myviewmodel : IValidatableObject { public long? Id { get; set; } public decimal? ProposedCost { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (Id != null && ProposedCost == 0) { yield return new ValidationResult("ProposedCost must be provided."); } } }
然后在控制器里,
[HttpPost] public ActionResult Submit(Myviewmodel model) { if (!ModelState.IsValid) { //Failed - report an error,redirect to action etc } //succeeded - save to database etc }
否则,最干净的解决方案是使用视图模型 – 需要属性的Updateviewmodel以及不需要的Createviewmodel.