2017-01-25 3 views
0

Я создал простую страницу ASP.Net для html. Я хотел бы поставить проверку пароля, ТОЛЬКО, когда страница изначально загружена, я сделал это со сценарием и назначил тег onload на тел. Проблема в том, что проверка пароля запускается каждый раз, когда я нажимаю кнопку. Почему это происходит? Как я могу выполнить проверку пароля ТОЛЬКО при открытии страницы? Спасибо заранее.Сценарий HTML onload запускается слишком много раз?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FotoDiClasse.aspx.cs" Inherits="FotoDiClasse" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Choose your sweatshirt</title> 
    <!-- password control --> 
    <script> 
     var password; 
     var pass1 = "1234"; 
     var firstTime = true; 

     function checkPassword() 
     { 
      if (firstTime) 
       firstTime = false; 
       password = prompt("Enter password to access the site", ''); 
       if (password != pass1) window.location = "http://www.google.com"; 
     }  
    </script> 
</head> 
<body onload="checkPassword()"> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="CreateButton" runat="server" Text="Create" Width="240px" OnClick="CreateButton_Click" /> 
     <asp:Button ID="SendButton" runat="server" Text="Send" Width="240px" OnClick="SendButton_Click" /> 
    </div> 
    </form> 
</body> 
</html> 

Этот флаг «первый раз» не работает

+0

Следует отметить, что 'password = prompt ...' будет работать независимо от того, является ли firstTime истинным или нет, потому что вы не используете фигурные скобки вокруг своих операторов if. Просто потому, что вы отступаете от кода, это не значит, что код не будет работать. –

ответ

0

Это происходит потому, что каждый раз, когда вы нажимаете на кнопку ваша страница загружается и onload() метод называется и, следовательно, каждый раз, когда этот метод называется.

Чтобы решить эту проблему, вам необходимо установить какую-то функцию, которая проверяет, загружается ли ваша страница в первый раз или нет, вы можете использовать cookie для хранения этого сеанса.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FotoDiClasse.aspx.cs" Inherits="FotoDiClasse" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <title>Choose your sweatshirt</title> 
    <!-- password control --> 
    <script> 
     var password; 
     var pass1 = "1234"; 
     var firstTime = true; 

     function checkPassword() 
     { 
      if (firstTime) 
       firstTime = false; 
       password = prompt("Enter password to access the site", ''); 
       if (password != pass1) window.location = "http://www.google.com"; 
     }  
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="CreateButton" runat="server" Text="Create" Width="240px" OnClick="CreateButton_Click" /> 
     <asp:Button ID="SendButton" runat="server" Text="Send" Width="240px" OnClick="SendButton_Click" onblur="checkPassword()"/> 
    </div> 
    </form> 
</body> 
</html> 
+0

Извините, я новичок в Html. Где вы помещаете это на обычную страницу aspx? –

+0

положить внутри сценарий теги –

+0

Я разместил его по основному вопросу –

0

Это называется PostBack. Каждый раз, когда нажимается кнопка, страница выполняет сообщение формы (PostBack). Это означает, что страница перезагружается.

С помощью фрагмента ниже вы можете вызвать функцию JavaScript только при первой загрузке страницы.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     ScriptManager.RegisterStartupScript(Page, Page.GetType(), "runScript", "alert('This is not a PostBack');", true); 
    } 
} 
+0

Где его добавить? –

+0

'Page_Load' должен присутствовать в файле' PageName.aspx.cs'. Вы добавляете его туда. – VDWWD

+0

Спасибо, я тоже попробую! :) –

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