Ответы Aristos и user449689 верны: у вас двойная обратная передача, потому что кнопка ASP.NET всегда выполняет обратную передачу (поэтому OnClientClick бесполезен, так как вызывает другую обратную передачу ранее).
Когда вы возвращаете true(или ничего не возвращать) из OnClientClick, вы не предотвращаете событие JavaScript onClick кнопки (т. е. кнопка по-прежнему нажимается и запускает _doPostBack с последующей обычной обратной передачей).Если вы вернете false, событие onClick отменяется (то есть кнопка на самом деле не нажата, поэтому запускается только _doPostBack).Это поведение JavaScript.
Атрибут OnClientClick отображается как «onClick» в коде HTML (когда этот атрибут находится на кнопке ASP.NET).Ваше утверждение ...
Button1.Attributes.Add("onClientClick", "__doPostBack('Button1','');return true;");
... не является допустимым HTML, так как он отображает "onClientClick", который не является событием JavaScript (т. Е. _DoPostBack никогда не запускается, а обычная обратная передача есть).Свойство атрибутов используется для добавления прямых атрибутов HTML (без перезаписи из .NET) к окончательному отображению кнопки.
Мой совет: не вызывайте _doPostBack, если вы не нашли никакой другой альтернативы для запуска сообщенияназад.В предоставленном вами примере атрибут OnClientClick полностью избыточен.
Надеюсь, я достаточно ясно (мой английский не очень хороший).