我正在尝试更改public static readonly string
inside的值System.Web.Mvc
。
具体来说,我正在尝试实现这篇文章中标记的答案所暗示的内容,并且我正在使用以下代码:
var htmlHelper = typeof(HtmlHelper);
var field = htmlHelper.GetField("ValidationInputCssClassName", BindingFlags.Public | BindingFlags.Static);
if (field != null)
{
// existing value is "input-validation-error"
field.SetValue(null, "has-error");
}
但是,在我设置该值后,GetValue
表明没有任何变化,这在生成的网页上得到了证实。
我能想到的唯一解释是 .NET 的 JIT 编译器会在我更改只读字段之前缓存它们。
或者有人有更好的建议吗?
更新:
如果我在调用field.GetValue(null)
后立即调用,SetValue
我会得到值“has-error”,正如我所期望的那样,这表明该static readonly
值可以更改。但是,当网页加载时,我发现存在未更改的字段。
更新2:
我相信上面的代码正在修改public static readonly string
字段。我之前的困惑是由于(1)检查GetValue
错误的事件(或者可能不是所有线程),以及(2)网页仍然使用旧值,因为正如我刚刚意识到的那样,是由于微软的 jquery .validate.unobtrusive.js 脚本具有硬编码的 CSS 类的名称。这就是为什么我一直在页面上看到旧值,而不是因为反射没有更新字段值。对浪费的任何时间表示歉意。