2011-10-08 76 views
0

我有一个控制器,我不想验证,当被调用时。ValidateInput(false)仍然触发在IValidatableObject中的验证

我的控制器:

[Authorize(Roles = "Admin")] 
[HttpPost] 
[ValidateInput(false)] 
public ActionResult Delete(MyLINQClass model) 
{ 
    // Do something 
} 

我的模型:

[MetadataType(typeof(MyLINQClass MetaData))] 
public partial class MyLINQClass : DefaultModel, IValidatableObject 
{ 
    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
    { 
     // Do validation 
    } 
} 

我不希望验证被触发,我想加入[ValidateInput(false)]会有所帮助。但Validate()仍然被触发。

im使用ASP MVC 3和.NET 4.

回答

1

[ValidateInput(false)]是不相关的模型验证。它禁用请求中的XSS字符的ASP.NET验证,例如<,>,...验证是在默认模型绑定器尝试绑定MyViewModel参数时触发的。如果您不想执行验证,只需编写另一个视图模型,该模型的删除操作将作为参数,并且不会有任何方法。

+0

感谢您的评论。我想我可以创建另一个视图模型,但问题是'MyViewModel'正在扩展一个LINQ类。所以如果我创建一个新的视图模型,我仍然会包含'MyViewModel'。 – Martin

+0

@Martin,视图模型不应该扩展任何域实体,比如LINQ类。它们应该是独立的,并且与特定观点的要求特别相关。例如,在你的情况下,你有不同的验证逻辑,所以不同的视图模型是合理的。您的控制器操作只采用视图模型并将视图传递给视图,而不是任何域实体,这是一种很好的做法。 –

+0

好的,我在那里看到你的逻辑。我会尝试做一些改变。 – Martin

相关问题