我有一个视图和模型,我用于记录的编辑和插入页面.其中一个业务要求是编辑时需要某个字段,而不是新字段.最初在这个特殊功能被添加到文档之前,我有这样的模型:
[Required(ErrorMessage = "*")]
[Range(0.0, (double)decimal.MaxValue)]
[DisplayName("Cost")]
[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
public decimal ProposedCost { get; set; }
Run Code Online (Sandbox Code Playgroud)
如果是插入表单,我想删除所需的属性,或者如果是编辑表单,则添加它.什么是更好的方法?我的所有其他验证都是如上所述完成的.或者我可以改变模型状态吗?思考?
编辑
我应该澄清的是,他们仍然被允许在新的成本上插入,只是不需要.
and*_*ter 34
如果您使用的是MVC3/.NET4,则可以使用IValidatableObject专门用于此目的的文件.
引用ScottGu,
... IValidatableObject接口使您能够执行模型级验证,并使您能够提供特定于整个模型状态的验证错误消息....
你的模特看起来像
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.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后在控制器中
[HttpPost]
public ActionResult Submit(MyViewModel model)
{
if (!ModelState.IsValid) {
//failed - report an error, redirect to action etc
}
//succeeded - save to database etc
}
Run Code Online (Sandbox Code Playgroud)
否则,最干净的解决方案是使用视图模型 - UpdateViewModel需要属性的CreateViewModel地方,以及不需要的地方.
| 归档时间: |
|
| 查看次数: |
27588 次 |
| 最近记录: |