Как предотвратить повторный ввод информации, когда SelectedIndexChanged Asp.NET C # - PullRequest
0 голосов
/ 02 июня 2018

У меня возникла проблема с моим методом DropDrown SelectedIndexChanged. Я закодировал Asp.NET DropDown, чтобы заполнить текстовое поле в соответствии с выбранным параметром, однако страница должна пройти несколько процессов, прежде чем попасть на кнопку DropDown, поэтомуSelectedIndexChanged работает отлично, он заполняет мое текстовое поле, однако после заполнения текстового поля страница запускает PostBack и обновляет весь сайт, поэтому радионавигационные кнопки и все выделенные мной элементы удаляются, поэтому мне нужно заполнить их зановои еще раз проверьте радионные кнопки, заполните другие текстовые поля и запустите мою форму с нуля, и, кроме того, страницы загружаются, как будто я начинаю все заново.

HTML

<div class="form-group">
   <label for="name" class="text-muted"><small><strong>Código del cliente:</strong></small></label>
       <asp:DropDownList AutoPostBack="true" ID="ddClientCode" OnSelectedIndexChanged="ddClientCode_SelectedIndexChanged" runat="server" CssClass="form-control input-sm btn-box-tool"></asp:DropDownList>
    </div>
       <div class="form-group">
       <label for="name" class="text-muted"><small><strong>Persona jurídica:</strong></small></label>
       <asp:TextBox ID="TxtLegalPerson1" CssClass="form-control" runat="server" placeholder="Persona jurídica" />
       </div>

Код

#region Populate Textboxes Based On Selected Index Client
    protected void ddClientCode_SelectedIndexChanged(object sender, EventArgs e)
    {
        string CLIENTE = ddClientCode.SelectedValue.ToString();
        TxtLegalPerson1.Text = BindCedulaJuridica(CLIENTE);
    }
    #endregion

    #region Bind [Cedula Juridica] based on ddClientCode
    public string BindCedulaJuridica(string x)
    {
        string returnValue = string.Empty;
        try
        {
            string constr = ConfigurationManager.ConnectionStrings["wiz"].ConnectionString;
            using (IDbConnection connection = new SqlConnection(constr))
            {
                connection.Open();
                using (IDbCommand command = connection.CreateCommand())
                {
                    command.CommandText = "SELECT Column FROM TABLE AS A where Client= '" + x + "'";
                    using (IDataReader reader = command.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            returnValue = reader["Column"].ToString();
                        }

                        if (connection.State == ConnectionState.Open)
                        {
                            connection.Close();
                        }
                        return returnValue;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            string err = ex.ToString();
        }
        return returnValue;
    }
    #endregion

Загрузка страницы

protected void Page_Load(object sender, EventArgs e)
    {
        #region User Validation
        string Group = (string)(Session["Group"]);
        switch (Group)
        {
            case "a":
                //Response.Redirect("/Dashboard");//This is temporal
                break;
            case "b":
                //Response.Redirect("/Dashboard");
                break;
            case "c":
                Response.Write("<script>alert('¡Lo sentimos, usted no cuenta con privilegios para crear reportes!');</script>");
                Response.Redirect("/Dashboard");
                break;
            case "d"://Check this name with the database
                //Response.Redirect("/Dashboard");
                break;
            default:
                break;
        }
        #endregion

        if (!IsPostBack)
        {
            this.FillTypes();
            this.FillStatationsDropDown();
            this.FillVehiculeCode();
            this.FillddOutAgency();
            this.FillddInAgency();
            this.FillCustomers();
        }
    }

Есть ли способ заполнить мое текстовое поле без обновлениястраница и без потери всей информации, которую я заполнил?

Заранее спасибо.

1 Ответ

0 голосов
/ 02 июня 2018

1 .Первое, что вызывает эту проблему, это событие Page_Load, которое загружает после события управления, такие как нажатие кнопки или изменение индекса выпадающего списка.Это можно решить с помощью if (!IsPostBack), который вы использовали.

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
    //if you have some default value settings for the dropdown, write here.
    }
}

2 .Когда ваша страница отправляет обратно, у вас есть новая страница.Единственное, что заставляет ваши элементы управления иметь свои старые значения, это ViewState.ViewState - это строка, содержащая некоторые данные для настройки вашей страницы.Все элементы управления наследуют включение / отключение ViewState со страницы.ViewState каждого элемента управления можно установить отдельно.

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

...