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

标签 c# javascript asp.net

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

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

    }

最佳答案

这并没有做你认为它正在做的事情:

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.

嗯,页面尚未呈现。没有表单元素。所以此时没有任何值(value)。

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

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

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

关于c# - 使用 JavaScript 的服务器端是否确认消息框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23391359/

相关文章:

c# - System.Drawing 对于 2D 游戏编程来说足够快吗?

c# - 内插字符串的软编码格式说明符 c# 6.0

C#/ASP.NET Core Web API : how to pass a list parameter?

javascript - 控制台中结果为 4.08-1.36

asp.net - VS2010删除未使用的图像/文件

c# - 将多个 WSDL 版本反序列化为同一对象

javascript - Angularjs:在匿名函数内的模块上注入(inject) Controller

javascript - 从递归创建数组

c# - ASP.Net Core 2.1 IdentityCore(用户登录时未添加角色声明)

asp.net - IIS7 : Sharing Sessions Between Applications With State Server