【问题标题】:Server Side Yes No Confirmation Message Box using JavaScript服务器端 是 否 使用 JavaScript 的确认消息框
【发布时间】:2014-04-30 14:51:03
【问题描述】:

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

    }

【问题讨论】:

  • 您的代码正试图通过查看表单值来获取确认对话框的结果,但是当您查看表单时该表单不会发回。您应该将需要在服务器上与在客户端上发生的事情分开。这将帮助您避免混淆。
  • 所以你的意思是 SelectedIndexChanged 永远不会触发,或者在其中,confirmValue = nothing?
  • 您需要在回调中将选择和警报的onchange ajax 到服务器
  • 有人能告诉我你们的建议吗?我不是 ajax 或 java-script,我正在尝试提出某种解决方案,这就是我目前能够做到的。请帮忙。谢谢

标签: c# javascript asp.net


【解决方案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.

嗯,页面还没有渲染。没有表单元素。所以在这一点上没有任何价值。

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

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

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

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 2018-05-20
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    相关资源
    最近更新 更多