1

我使用ASP.NET MVC 3,我有我添加自己的自定义验证属性:ASP.NET MVC 3 IClientValidatable属性 - 明确的参数缓存

public class CustomAttribute : ValidationAttribute, IClientValidatable { 
    private readonly string _parameter1; 

    public CustomAttribute(string parameter1) { 
     _parameter1 = Global.Settings[parameter1]; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext context) { 
     ... 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) { 
     yield return new ModelClientValidationRule() { 
      ErrorMessage = FormatErrorMessage(metadata.DisplayName), 
      ValidationType = "custom", 
      ValidationParameters = { { "parameter1", _parameter1 } } 
     }; 
    } 
} 

注意它是如何实现IClientValidatable。这会将parameters1设置呈现为页面中字段中的HTML 5数据属性。

我的问题是设置的值可以改变,但每次改变它仍然呈现数据属性中的旧值。我猜这是缓存在某处。无论如何删除缓存?

我会很感激的帮助。谢谢

回答

0

我发现了一个黑客来解决这个问题。您需要重新启动应用程序。这可以使用HttpRuntime.UnloadAppDomain()以编程方式完成。如果您的应用程序未处于完全信任模式,请参阅http://www.west-wind.com/weblog/posts/2006/Oct/08/Recycling-an-ASPNET-Application-from-within

+0

有没有办法做到这一点,而无需重新启动应用程序/池?在生产环境中,这是不可行的,否则所有活动会话都会丢失,至少可以说我没有看到 – mrd3650 2016-04-27 13:31:28

+0

。自从我发布这个问题以来,我一直没有看过,所以也许有人提出了一个更好的方法。 – nfplee 2016-04-27 15:32:31