2009-03-31 1 views
0

Мне нужно разместить страницу входа с сайта сторонних разработчиков в iframe на другом веб-сайте, который я разрабатываю. Мне нужно добавить JavaScript, чтобы вырваться из iframe, когда пользователь входит в систему, но я не могу заставить кнопку входа в систему выполнить JavaScript и сделать обратную передачу для входа - только один или другой.Добавление «onClientClick» javascript в элемент управления доступом ASP.NET

Вот код на странице входа в iframe'd, что я triying адаптироваться:

<asp:LoginView ID="LoginView1" runat="server"> 
<AnonymousTemplate> 
    <asp:Login ID="Login1" runat="server" OnAuthenticate="Login1_Authenticate"> 
     <LayoutTemplate> 
       <asp:Label ID="lblUsername" runat="server" AssociatedControlID="Username" Text="Email" /> 
       <asp:TextBox ID="Username" runat="server" Text="myName" /> 
       <asp:Label ID="lblPassword" runat="server" AssociatedControlID="Password" Text="Password" /> 
       <asp:TextBox ID="Password" runat="server" Text="myPassword" /> 
       <asp:ImageButton ID="btnLogin" runat="server" CommandName="Login" ImageUrl="~/Images/login-submit.gif" AlternateText="Login" OnClientClick="top.location.href = document.location.href; return true;" /> 
     </LayoutTemplate> 
    </asp:Login> 
</AnonymousTemplate> 
<LoggedInTemplate> 
    You are currently logged in blurb.. 
</LoggedInTemplate> 

В настоящее время, когда кнопка нажата Логин, то Войти страница разразится из фрейма, но затем я должен снова нажать кнопку, чтобы войти в систему. Может ли кто-нибудь увидеть, что я делаю неправильно? Благодарю.

ответ

4

top.location.href устанавливает URL-адрес браузера как новый URL-адрес, поэтому вы никогда не завершаете действие клика.

Что вы можете сделать, это установить цель формы, чтобы быть «_top»

что-то вроде

OnClientClick="document.getElementById('MYFORM_CLIENTID').target='_top';return true;" 
+0

Отлично, спасибо большое. – Nick

+0

Да, это должно сработать! –

1

Глядя на ваш код я думаю, что на первый клик вы не регистрируясь. Вы просто перенаправляете родительское окно на свою страницу входа (тот, который сначала отображается в IFrame). Вот почему вам нужно дважды щелкнуть эту кнопку, чтобы войти в систему - во второй раз нет перенаправления, поскольку URL-адрес родительского окна не изменяется, поэтому в основном во второй раз часть top.location.href = document.location.href не дает никаких результатов, и логин продолжается ,

Я думаю, что правильный курс действий состоял бы в том, чтобы сначала аутентифицироваться, а затем перенаправить, противоположно тому, как он выглядит в настоящее время. Вы можете добавить скрипт на обратной стороне на этой странице, чтобы он проверял, работает ли он в кадре, и если это так, он перенаправляет родительское окно на другую страницу. Конечно, если вы можете изменить код ... С учетом объема деталей я могу только сказать, что может быть неправильно, и предложить исправить, но не может дать решение.

+0

К сожалению, у меня есть только доступ к .aspx в этой ситуации, а не файл .cs. Если их страница входа в систему была принята, вывешивали значения с моего сайта, мне бы не понадобился взлом iframe/javascript .. :) – Nick

+0

В любом случае Justin придумал простейшее решение. Мне по крайней мере удалось определить причину проблемы ... –