Принятый ответ, хотя и может работать, может быть не самым лучшим решением, так как он основан на порядке регистрации блоков скриптов, совпадающем с порядком вывода, на который нельзя полагаться.На странице MSDN для RegisterStartupScript
:
Блоки сценариев запуска, зарегистрированные с помощью RegisterStartupScript, не гарантированно выводятся в том же порядке, в котором они зарегистрированы.Если важен порядок блоков сценариев запуска, используйте объект StringBuilder, чтобы собрать блоки сценариев в одну строку, а затем зарегистрируйте их все как один сценарий запуска.
Здесь возможнолучше исправить:
public class ValidationSummarySansBug : ValidationSummary
{
// The bug is that the base class OnPreRender renders some javascript without a semicolon.
// This solution registers an almost-identical script *with* a semicolon using the same type and key and relies on the
// behavior of ClientScriptManager.RegisterStartupScript to ignore duplicate script registrations for the same type/key
protected override void OnPreRender(EventArgs e)
{
if (Enabled)
{
ScriptManager.RegisterStartupScript(
this,
typeof(ValidationSummary), // this type must match the base type's specified type for the script we're fixing
ClientID + "_DisposeScript", // this key must match the base type key for the script we're fixing
@"
document.getElementById('{0}').dispose = function() {{
Array.remove(Page_ValidationSummaries, document.getElementById('{0}'));
}};
".FormatInvariant(ClientID),
true);
}
base.OnPreRender(e);
}
}