Отключенная кнопка обновляется - PullRequest
1 голос
/ 25 августа 2011

У меня есть страница aspx, содержащая 2 кнопки «Обновить» и «По умолчанию».У меня есть раскрывающийся список, который содержит несколько значений, скажем, от 1 до 10. Когда я нажимаю кнопку «По умолчанию», для раскрывающегося списка устанавливается значение по умолчанию, например, 4. Если я хочу установить значение раскрывающегося списка на 3, я выбираю 3 инажмите кнопку Обновить, и изменения будут сохранены где-нибудь, возможно, в БД.

Первоначально кнопка Обновить отключена.Кнопка «Обновить» активна только в том случае, если в раскрывающемся списке внесены какие-либо изменения.Предполагая, что кнопка «Обновление» изначально отключена, я нажимаю кнопку «По умолчанию», чтобы установить в раскрывающемся списке начальное значение.Когда я это делаю, происходит обратная передача, во время которой кнопка «Обновление» внезапно становится активной, а затем отключенной.Как мне избежать этого?Во время обновления страницы я не хочу, чтобы отключенная кнопка «Обновление» была включена, а затем отключена.ALl это происходит за миллисекунду, но все еще видно.

есть ли выход из этого?

Код проекта выглядит следующим образом: ASPX

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Diagnostic Server Configuration Tool</title>
    <link rel="stylesheet" type="text/css" href="../css/style001.css" />
    <style type="text/css">
        a.info
        {
            position: relative; /*this is the key*/
            z-index: 24; /*background-color:#ccc;*/
            color: #000;
            border-width: 0px;
            border-style: none;
            text-decoration: none;
        }

        a.info:hover
        {
            z-index: 25;
            background-color: #ff0;
        }

        a.info span
        {
            display: none;
        }

        a.info:hover span
        {
            /*the span will display just on :hover state*/
            display: block;
            position: absolute;
            bottom: 2em;
            right: 2em;
            width: 15em;
            border: 1px solid #0cf;
            background-color: #cff;
            color: #000;
            text-align: left;
            padding: 5px;
        }
    </style>
    <script language="javascript" type="text/javascript">
        function setDefaults() {
            if (document.getElementById("dlLoggingLevel").value != document.getElementById("dlLoggingLevel_Def").value) {
                document.getElementById("dlLoggingLevel").value = document.getElementById("dlLoggingLevel_Def").value;
                document.getElementById("imgLoggingLevel").src = "../images/field_ok.png";
                document.getElementById("imgLoggingLevelUndo").style.display = "inline";
                document.getElementById("btnUpdate").disabled = false;
            }
            if (document.getElementById("txtMaxFileSize").value != document.getElementById("txtMaxFileSize_Def").value) {
                document.getElementById("txtMaxFileSize").value = document.getElementById("txtMaxFileSize_Def").value;
                document.getElementById("imgMaxSize").src = "../images/field_ok.png";
                document.getElementById("imgMaxSizeUndo").style.display = "inline";
                document.getElementById("btnUpdate").disabled = false;
            }
        }
        function isNumberKey(evt) {
            var charCode = (evt.which) ? evt.which : event.keyCode
            if (charCode > 31 && (charCode < 48 || charCode > 57))
                return false;

            return true;
        }
    </script>
    <script language="javascript" type="text/javascript" src="../Css/wcf_validate.js"></script>
</head>
<body>
    <form id="form1" runat="server">

    <div>
        <br />
        <div class="divEditHeader" id="EditHeader">
            <h1>
                Logging Configuration
            </h1>
            <table width="100%">
                <tr>
                    <td align="left">
                        <asp:Button CssClass="formEditBtn" runat="server" ID="btnUpdate" Text="Update" OnClick="btnUpdate_Click"
                            Enabled="false" />
                        <button class="formEditBtn" onclick="javascript:setDefaults();" causesvalidation="false">
                            Default</button>
                    </td>
                    <td align="right">
                    </td>
                </tr>
            </table>
        </div>
        <br />
        <table class="InputTable">
            <tr class="Prompt">
                <td class="Prompt">
                    Logging Level
                </td>
                <td>
                    <asp:DropDownList runat="server" ID="dlLoggingLevel">
                        <asp:ListItem Text="NONE" Value="none"></asp:ListItem>
                        <asp:ListItem Text="FATAL" Value="fatal"></asp:ListItem>
                        <asp:ListItem Text="ERROR" Value="error"></asp:ListItem>
                        <asp:ListItem Text="WARNING" Value="warning"></asp:ListItem>
                        <asp:ListItem Text="INFO" Value="info"></asp:ListItem>
                        <asp:ListItem Text="DEBUGLOW" Value="debuglow"></asp:ListItem>
                        <asp:ListItem Text="DEBUGMEDIUM" Value="debugmedium"></asp:ListItem>
                        <asp:ListItem Text="DEBUGHIGH" Value="debughigh"></asp:ListItem>
                        <asp:ListItem Text="DEBUGALL" Value="debugall"></asp:ListItem>
                    </asp:DropDownList>
                    <img id="imgLoggingLevel" src="../images/blank.png" />
                    <asp:TextBox runat="server" ID="dlLoggingLevel_Init" Style="display: none"></asp:TextBox>
                    <asp:TextBox runat="server" ID="dlLoggingLevel_Def" Style="display: none"></asp:TextBox>
                    <img id="imgLoggingLevelUndo" src="../images/restore.png" style="display: none; cursor: hand"
                        onmouseover="this.src='../Images/restore_hov.png'" onmouseout="this.src='../Images/restore.png'"
                        onclick="restoreValue('dlLoggingLevel','dlLoggingLevel_Init','imgLoggingLevel','imgLoggingLevelUndo')" />
                </td>
                <td>
                    <a href="javascript: void 0" class="info">
                        <img src="../images/help.png" border="0">
                        <span><font size="2">Enter the desired level of diagnostic data logging. Default: INFO.
                        </font></span></a>
                </td>
            </tr>
            <tr class="Prompt">
                <td class="Prompt">
                    Maximum Log File Size(MB)
                </td>
                <td>
                    <asp:TextBox runat="server" ID="txtMaxFileSize" Width="36px" MaxLength="3"></asp:TextBox>
                    <asp:TextBox runat="server" ID="txtMaxFileSize_Init" Style="display: none"></asp:TextBox>
                    <asp:TextBox runat="server" ID="txtMaxFileSize_Def" Style="display: none"></asp:TextBox>
                    <img id="imgMaxSize" src="../images/blank.png" />
                    <asp:CustomValidator runat="server" ID="valMaxSize" ControlToValidate="txtMaxFileSize"
                        Display="Dynamic" ErrorMessage="" ClientValidationFunction="MaxSize_Validate"></asp:CustomValidator>
                    <img id="imgMaxSizeUndo" src="../images/restore.png" style="display: none; cursor: hand"
                        onmouseover="this.src='../images/restore_hov.png'" onmouseout="this.src='../images/restore.png'"
                        onclick="restoreValue('txtMaxFileSize','txtMaxFileSize_Init','imgMaxSize','imgMaxSizeUndo')" />
                </td>
                <td>
                    <a href="javascript: void 0" class="info">
                        <img src="../images/help.png" border="0">
                        <span><font size="2">Enter the maximum log file size in MB. Default: 2 MB. Range: 1
                            - 100 MB. </font></span></a>
                </td>
            </tr>
        </table>
        <br />
        <asp:Label runat="server" ID="lblMessage" Font-Bold="true"></asp:Label>
        <br />
    </div>
    </form>
</body>
</html>

Код позади

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DiagnosticCommon;
using System.Drawing;

public partial class Settings_LogSettings : System.Web.UI.Page
{
    const string EnvVariable = "DIAGNOSTICSERVER";
    const string ConfigFileName = "DiagnosticService.exe.config";
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Security.EnforceSecurity())
            Response.Redirect("Login.aspx");

        if (!IsPostBack)
        {
            DebugHelper.MaxDebugLevel = DebugHelper.Parse(ConfigReader.GetValue("LoggingLevel"));
            DebugHelper.MaxLogFileSize = long.Parse(ConfigReader.GetValue("LogFileSize"));

            txtMaxFileSize.Attributes.Add("onchange", "javascript:MaxSize_Validate('',this);");
            txtMaxFileSize.Attributes.Add("onkeypress", "return isNumberKey(event)");

            dlLoggingLevel.Attributes.Add("onchange", "javascript:Logging_Validate('',this);");

            BindData();
            BindInitData();
            BindDefaults();
        }

    }

    private void BindData()
    {
        string installPath = Environment.GetEnvironmentVariable(EnvVariable);
        try
        {
            dlLoggingLevel.SelectedValue = ConfigReader.GetValue("LoggingLevel");
            txtMaxFileSize.Text = ConfigReader.GetValue("LogFileSize");
        }
        catch (Exception ex)
        {
            lblMessage.Text += ex.Message + "<br>" + installPath;
            lblMessage.ForeColor = Color.Red;
        }

    }

    private void BindInitData()
    {
        string installPath = Environment.GetEnvironmentVariable(EnvVariable);
        try
        {
            dlLoggingLevel_Init.Text = ConfigReader.GetValue("LoggingLevel");
            txtMaxFileSize_Init.Text = ConfigReader.GetValue("LogFileSize");
        }
        catch (Exception ex)
        {
            lblMessage.Text += ex.Message + "<br>" + installPath;
            lblMessage.ForeColor = Color.Red;
        }

    }

    protected void btnCancel_Click(object sender, EventArgs e)
    { 
    }
    protected void btnSubmit_Click(object sender, EventArgs e)
    { 
    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        try
        {
            lblMessage.Text = "";
            ConfigReader.SetValue("LoggingLevel", dlLoggingLevel.SelectedValue);
            ConfigReader.SetValue("LogFileSize", txtMaxFileSize.Text);

            lblMessage.Text = "Configuration updated.";
            lblMessage.ForeColor = Color.Green;
            btnUpdate.Enabled = false;
            BindInitData();

        }
        catch (Exception ex)
        {
            lblMessage.Text += ex.Message;
            lblMessage.ForeColor = Color.Red;
        }
    }

    private void BindDefaults()
    {
        try
        {
            dlLoggingLevel_Def.Text = ConfigReader.GetDefault("LoggingLevel");
            txtMaxFileSize_Def.Text = ConfigReader.GetDefault("LogFileSize");
        }
        catch (Exception ex)
        {
            lblMessage.Text = ex.Message;
            lblMessage.ForeColor = Color.Red;
            btnUpdate.Enabled = false;
        }

    }


}

Ответы [ 2 ]

0 голосов
/ 25 августа 2011

Ниже приведена строка в методе setDefaults(), который на некоторое время включает кнопку обновления, происходит обратная запись и кнопка обновления снова отключается.

document.getElementById("btnUpdate").disabled = false;

Либо прокомментируйте эту строку, либо установите true

0 голосов
/ 25 августа 2011

Поскольку для кнопки не определено type, используется тип по умолчанию, который представляет собой кнопку отправки.
Это означает, что при нажатии кнопки Default код JS выполняется, но затем форма отправляется.

Чтобы избежать отправки, просто сделайте кнопку обычной кнопкой:

<button type="button" class="formEditBtn" onclick="javascript:setDefaults();" causesvalidation="false">Default</button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...