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

本文关键字:确认 消息 是否 服务器端 JavaScript 使用 | 更新日期: 2023-09-27 18:00:53

我在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>

//aspx文件中的下拉菜单

//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的服务器端是否确认消息框

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

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Confirm()", true);
string confirmValue = Request.Form["confirm_value"];

服务器端代码在将页面呈现给客户端之前完整运行。这两者之间没有隐含的来回。所以上面几行基本上说:

When the page renders, create a form element in JavaScript.
Get the value from the form element.

这个页面还没有呈现出来。没有表单元素。所以在这一点上没有任何价值。

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

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

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