C# 服务器端是否使用JavaScript确认消息框

C# 服务器端是否使用JavaScript确认消息框,c#,javascript,asp.net,C#,Javascript,Asp.net,我在JavaScript中创建了一个隐藏字段,该隐藏字段用于捕获用户从消息框中选择的值。当从下拉框中进行选择时,我将调用以检查从下拉框中选择的ID是否已在表中,如果在表中仅找到ID,则我将调用JavaScript以显示消息框。如果用户选择“是”,则显示一些警报;如果用户选择“否”,则显示另一个警报。不知何故,我很难让它发挥作用,当我从下拉列表中进行选择时,什么也没有发生。请帮忙,因为我花了好几天的时间研究这个。谢谢 这是我的代码: //javascript code <script t

我在JavaScript中创建了一个隐藏字段,该隐藏字段用于捕获用户从消息框中选择的值。当从下拉框中进行选择时,我将调用以检查从下拉框中选择的ID是否已在表中,如果在表中仅找到ID,则我将调用JavaScript以显示消息框。如果用户选择“是”,则显示一些警报;如果用户选择“否”,则显示另一个警报。不知何故,我很难让它发挥作用,当我从下拉列表中进行选择时,什么也没有发生。请帮忙,因为我花了好几天的时间研究这个。谢谢 这是我的代码:

 //javascript code
 <script type="text/javascript">
        function Confirm() {
            var confirm_value = document.createElement("INPUT");
            confirm_value.type = "hidden";
            confirm_value.name = "confirm_value";
            if (confirm("Do you want to delete data?")) {
                confirm_value.value = "Yes";
            } else {
                confirm_value.value = "No";
            }
            document.forms[0].appendChild(confirm_value);
        }
</script>
//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }

这不是在做你认为它在做的事情:

//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
string confirmValue = Request.Form["confirm_value"];
在将页面呈现给客户端之前,服务器端代码将完整运行。这两者之间没有明显的来回关系。所以上面几行基本上说:

//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }
When the page renders, create a form element in JavaScript.
Get the value from the form element.
嗯,页面还没有呈现。没有表单元素。所以在这一点上没有价值

//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }
正如评论中所建议的,您要做的是从客户端(JavaScript)代码向服务器端资源(页面、处理程序等)发出AJAX请求。有很多关于如何在ASP.NET中使用AJAX的教程。看起来您正在使用WebForms,因此我建议您使用ASHX处理程序(最佳实践)或独立的ASPX页面(有时更容易)来简化AJAX请求

//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }
基本上,您希望构建一个JavaScript函数来调用客户端代码,该函数将启动AJAX调用并将表单值作为参数(GET或POST参数都很简单)。服务器端处理程序(ASHX或ASPX)将接收该参数,检查数据库,并以结果作出响应。结果是响应的内容(不像从方法返回),不应该有任何页面输出。JavaScript AJAX调用接收响应,检查返回值,并相应地响应用户

//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }

要记住的主要一点是,客户端代码和服务器端代码之间存在着严格的物理分离。它们不能“互相呼叫”,不能同时运行,等等。客户端向服务器发出HTTP请求,服务器接收这些请求,运行一些代码,并用HTTP响应进行响应。客户端接收这些响应,解析结果,并相应地运行代码。一切都以HTTP请求和响应的形式发生。

您的代码试图通过查看表单值来获取确认对话框的结果,但当您查看表单时,表单不会返回。您应该将需要在服务器上发生的事情与在客户机上发生的事情分开。这将帮助您避免混淆。所以您的意思是SelectedIndexChanged从不触发,或者在其中,confirmValue=nothing?您需要在回调中更改SelectandAlert后将ajax发送到服务器。有人能告诉我您的建议吗?我不是ajax或java脚本,我正在尝试提出某种解决方案,这就是我目前能够做到的。请帮忙。谢谢
//code behind
  protected void ddl_SelectedIndexChanged(object sender, EventArgs e)
    {

       string ID = ddlName.SelectedValue;

        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = "SELECT count(*) from MyTable WHERE ID =@ID";
                cmd.Parameters.AddWithValue("@ID", ID);
                con.Open();
                int result = (int)cmd.ExecuteScalar();

                if (result >= 1)
                {
                    ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
                    string confirmValue = Request.Form["confirm_value"];
                    if (confirmValue == "Yes")
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked YES!')", true);
                }
          else
                {
                    this.Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('You clicked NO!')", true);
                }                 

                }
                con.Close();
            }
        }

    }