Member 13749768 Ответов: 1

Нужно нажать кнопку Отправить дважды-снова...


Я знаю, что это было поднято много раз на многих сайтах, но попытка всех решений до сих пор не сработала. Мое приложение берет код и ищет пароль для этого кода. Он не возвращает пароль при первом щелчке, но делает это при втором щелчке. В этой функции я устанавливаю текст на метке, чтобы знать, что функция выполняется в первый раз, просто ничего не помещается в буфер обмена. Вот код (обрезанный вниз):

CLIENT SIDE:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="password.aspx.cs" Inherits="SupportTools.OTPW.password" %>
<%@ Register TagPrefix="obout" Namespace="Obout.Interface" Assembly="obout_Interface" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
    <script type="text/javascript">

        function ButtonOnClick() {

            var textArea = document.createElement("textarea");

            textArea.value = document.getElementsByName("ctl00$MainContent$thePass")[0].value;

            document.body.appendChild(textArea);

            textArea.select();

            document.execCommand("copy");

            document.body.removeChild(textArea);
            
        }

<table style="font-family:'Trebuchet MS', 'Lucida Sans Unicode', 'Lucida Grande', 'Lucida Sans', 'Arial', 'sans-serif'">
    <tr>
        <td><obout:OboutButton runat="server" ID="btnCopy" Text="Double Click to Copy Password" OnClick="txtInput_TextChanged"></obout:OboutButton></td>
        <td><obout:OboutTextBox runat="server" ID="txtInput" Width="40" MaxLength="3"></obout:OboutTextBox></td>
    </tr>
</table>

</asp:Content>


CODE BEHIND:

Protected void Page_Load(object sender, EventArgs e)
{
     if (! Page.IsPostBack)
     {
          if (!checkGroupAuth()) { Response.Redirect("https://foo.bar.com/authFailed.aspx"); }
     }

}

protected void txtInput_TextChanged(object sender, EventArgs e)
{
     string strLookup = txtInput.Text;
     if (strLookup.Length < 3) { return; }

     string thePassword = "";
     string ver = "";

     # CODE TO LOOKUP THE PASSWORD IS DELETED HERE

     txtPW.Text = thePassword;
     thePass.Value = thePassword;
     lblMessage.Text = "The " + ver + " password for " + txtInput.Text + " has been copied to your clipboard.";

     ScriptManager.RegisterOnSubmitStatement(btnCopy, this.GetType(), "ButtonClicked", "ButtonOnClick()");
}


Что я уже пробовал:

- В какой-то момент я использовал панель обновления. Наличие этого в или удаление, кажется, не имеет никакого влияния
- Я уверен, что это связано с жизненным циклом страницы, но сколько бы рекомендаций я ни пробовал, я все равно не могу понять этого.

Любая помощь будет очень признательна.

Richard Deeming

Вы пробовали использовать встроенный TextBox контроль, чтобы исключить ошибку в управлении Obout?

Member 13749768

Да, в какой-то момент я избавился от всех элементов управления Obout, чтобы исключить их.

ZurdoDev

Просто поместите в него точки останова, отладьте его и выясните, что происходит.

1 Ответов

Рейтинг:
2

Patrice T

Цитата:
Нужно нажать кнопку Отправить дважды-снова...

При первом щелчке происходит что-то неожиданное, и единственный способ понять проблему-это использовать отладчик, чтобы точно увидеть, что делает код, и проверить все переменные на соответствие ожидаемым значениям.

Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что вы должны делать, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]
Отладка кода C# в Visual Studio - YouTube[^]
Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.