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

时间:2014-04-30 14:51:04

标签: c# javascript asp.net

我在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();
            }
        }

    }

1 个答案:

答案 0 :(得分:1)

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

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的很多教程。看起来你正在使用WebForms,所以我建议使用ASHX处理程序(最佳实践)或独立的ASPX页面(有时更容易)来促进AJAX请求。

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

要记住的主要事情是客户端代码和服务器端代码之间存在硬性物理隔离。他们不能互相呼叫,他们不会同时运行,等等。客户端向服务器发出HTTP请求,服务器接收这些请求,运行一些代码,并使用HTTP响应进行响应。客户端会收到这些响应,解析结果并相应地运行其代码。一切都发生在HTTP请求和响应中。