Обновите выпадающий список с ajax вызовом asp.net - PullRequest
1 голос
/ 14 апреля 2020

У меня есть веб-страница с раскрывающимся списком «ListBox» с адресом электронной почты пользователей.

Как создать функцию, которая обновляет раскрывающийся список «ListBox» каждый раз, когда я добавляю нового пользователя электронной почты в раскрывающийся список?

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

Это мой код:

    nnewuser.txuser = $("[id*=txuser]").val();

    $.ajax({
        type: "POST",
        url: "prefix.aspx/Savepnusers" + qString,
        data: '{nnewuser: ' + JSON.stringify(nnewuser) + '}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        success: function (response) {
            if ($("[id*=txuser]").val()) {
                alert("Ok");
                alert(JSON.stringify(nnewuser));
                $("[id*=ListBox1]").html(response);                            
            }
        },

        failure: function (response) {
            alert(response.d);
        },

        error: function (response) {
            alert(response.d);
        },

        error: function (xhr, ajaxOptions, thrownError) {
            alert("error : " + thrownError + JSON.stringify(nnewuser));
        }
    });
    return false;
});

Savepnusers

public class pnnusers
{
    public string txuser { get; set; }
}

[WebMethod(EnableSession = true)]
[ScriptMethod]
public static void Savepnusers(pnnusers nnewuser)
{
    string sql = @String.Format(" INSERT INTO `tbl_email` (email) VALUES (?); ");

    using (OdbcConnection cn =
      new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
    {
        using (OdbcCommand command =
                new OdbcCommand(sql, cn))
        {
            try
            {
                command.Connection.Open();
                command.Parameters.AddWithValue("param1", nnewuser.txuser.ToString());
                command.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                command.Connection.Close();
            }
        }
    }
}

DropDownList

private void MTListBox1()
{
    DataTable dt = new DataTable();

    sql = @String.Format(" SELECT ");
    sql += String.Format(" LOWER(Email) AS UserEmail ");
    sql += String.Format(" FROM ");
    sql += String.Format("  tbl_email ORDER BY LOWER(Email) ASC; ");

    using (OdbcConnection cn =
        new OdbcConnection(ConfigurationManager.ConnectionStrings["cn"].ConnectionString))
    {
        using (OdbcCommand command =
            new OdbcCommand(sql, cn))
        {
            try
            {
                command.Connection.Open();
                OdbcDataAdapter sqlDa = new OdbcDataAdapter(command);
                sqlDa.Fill(dt);

                if (dt.Rows.Count > 0)
                {
                    ListBox1.DataTextField = "UserEmail";
                    ListBox1.DataValueField = "UserEmail";
                    ListBox1.DataSource = dt;
                    ListBox1.DataBind();
                }
            }
            catch (OdbcException ex)
            {
                string msg = "Fetch Error:";
                msg += ex.Message;
                throw new Exception(msg);
            }
            finally
            {
                command.Connection.Close();
            }
        }
    }
}

1 Ответ

1 голос
/ 14 апреля 2020

Здесь есть две основные проблемы:

Во-первых, ваш Savepnusers метод ничего не возвращает, поэтому вы не можете использовать ответ в AJAX вызовах. Вам нужно повторно инициализировать ListBox1 или добавить новый элемент после успешного завершения Savepnusers:

Во-вторых, кажется, что вы не можете правильно отправить nnewuser в качестве параметра. Вам не нужно использовать класс pnnusers, просто используйте тип string в качестве параметра.

Таким образом, на стороне сервера:

public static void Savepnusers(string nnewuser)

На стороне клиента вам необходимо добавить элемент раскрывающегося списка с jquery:

var txtUser = $("[id*=txuser]").val();
$.ajax({
        type: "POST",
        url: "prefix.aspx/Savepnusers",
        data: JSON.stringify({ nnewuser: txtUser }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",

        success: function () {
            //Since you can't use response object, you can append new item  to dropdownlist
            if (txtUser) {
               $("[id*=ListBox1]").append('<option value="'+txtUser+'">'+txtUser+'</option>');         
            }

        },

        failure: function (response) {
            alert(response.d);
        },

        error: function (response) {
            alert(response.d);
        },

        error: function (xhr, ajaxOptions, thrownError) {
            alert("error : " + thrownError + JSON.stringify(nnewuser));
        }
    });

См .: asp значение раскрывающегося списка c значение из javascript выпуск

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...