在 asp.net 中使用 ajax 调用更新下拉列表

Posted

技术标签:

【中文标题】在 asp.net 中使用 ajax 调用更新下拉列表【英文标题】:Update dropdown list with ajax call in asp.net 【发布时间】:2020-07-26 20:52:45 【问题描述】:

我有带有用户电子邮件地址的下拉列表“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;
);

保存用户

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();
            
        
    

下拉列表

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();
            
        
    

【问题讨论】:

什么不完全有效?你有什么错误或什么吗?你也可以添加你的Savepnusers 方法吗? @SelimYıldız 好的,在第一个问题中添加了 Savepnusers 您的方法不返回任何内容,因此您不能在 ajax 中使用响应。你如何初始化你的ListBox1?我建议你在调用 Savepnusers 方法后重新初始化你的下拉列表。 @SelimYıldız 怎么做?请问有什么例子吗? 我可以提供一个解决方案,但我需要看看你如何初始化你的下拉列表。你能补充一下吗? 【参考方案1】:

这里有两个主要问题:

首先,您的 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 dropdownlist dynamic value from javascript issue

【讨论】:

非常感谢您的帮助,非常感谢。

以上是关于在 asp.net 中使用 ajax 调用更新下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

如何通过在 ASP.NET MVC 框架中调用 ajax 来显示 kendoDropDownList?

如何通过 ajax 使用数据库数据填充 ASP.NET MVC 4 下拉列表

在使用 Newtonsoft 之后,ajax 调用在 asp.net 中返回 HTML 响应而不是 Json

如何使用 ajax 在 Asp.net 中填充下拉列表

使用 ajax 和 webmethod 在 asp.net 中使用 web 方法和 ajax 级联下拉列表绑定下拉数据

SyntaxError:在 asp.net 中的 ajax 调用中位置 4 的 JSON 中的意外令牌 <