2013-12-17 3 views
2

Может кто-то пожалуйста, объясните, почему btnSaveFile1 щелкают, OnClientClick() вызывается, и если OnClientClick() возвращает истину, он вызывает сервер, но если OnClientClick() возвращается false, он не вызывает сервер. Это я полностью понимаю., когда для вызова сервера OnClick против OnClientClick

Но почему не то, что в случае btnSaveFile2, кажется, никогда не называют сервер, независимо от того, какие OnClientClick() возвращается?

Почему возвращает false; должны быть встроенными?

<asp:Button ID="btnSaveFile1" runat="server" Text="Save" OnClientClick="if(!onClientClick()){return false;}" OnClick="btnSaveFile_Click" UseSubmitBehavior="false" /> 


<asp:Button ID="btnSaveFile2" runat="server" Text="Save" OnClientClick="return onClientClick()" OnClick="btnSaveFile_Click" UseSubmitBehavior="false" /> 


<script type="text/javascript"> 
     function onClientClick() { 
      if (CurrentMemberValidatedWindow()) { 
       if (!ValidateForm()) { 
        return false; 
       } 
      } 
      else { 
       DeleteInvalidFiles(); 
       return false; 
      } 
      return true; 
     } 
</script> 

ответ

2

TL; DR: удалить UseSubmitBehavior="false"

Longer объяснение:

Используйте свойство UseSubmitBehavior указать, использует ли элемент управления Button представить механизм клиентского браузера или постбэк ASP.NET механизм. По умолчанию значение этого свойства истинно, в результате чего элемент управления Button использует механизм отправки браузера. Если вы укажете false, структура страницы ASP.NET добавит клиентский скрипт на страницу , чтобы отправить форму на сервер.

Если вы посмотрите на исходный код страницы, то onclick для оказанной кнопки не просто или "return onClientClick();", потому что он должен добавить сценарий на стороне клиента, чтобы отправить форму. Так что теперь для первой кнопки это:

"if(!onClientClick()){return false;};__doPostBack('ctl00$MainContent$btnSaveFile1','')" 

и для второго это

"return onClientClick();__doPostBack('ctl00$MainContent$btnSaveFile2','')" 

Таким образом, вы можете увидеть в случае # 2, если она возвращает true, он не достигнет сценария, фактически представляет форму. (это не относится к кнопке 1, которая достигает скрипта и, таким образом, представляет форму).

Смежные вопросы