【问题标题】:javascript confirm through code behind [closed]javascript通过背后的代码确认[关闭]
【发布时间】:2013-08-21 18:24:29
【问题描述】:

以下查询在文本框中

SELECT  [Brewery], [CP CS]   FROM [Vw_QueryBuilder_27QueryBuilder1]  

这两个字段在一些报告中使用

现在如果有人删除了上述任何一列,那么它会要求确认删除所有相关报告

我被确认卡住了

我试过了

  ScriptManager.RegisterStartupScript(Page, typeof(Page), "somekey", "Confirm()", true);
                   // Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function", "Confirm()", true);
                  //  Response.Write("<script>javascript:Confirm();</script>");
                    string confirmValue = CnfHide.Value.Trim();
                    if (confirmValue == "1")

javascript 是

 function Confirm() {

        if (confirm("Some columns are being used in other reports, removing those columns from query builder will lead to remove all related reports. Dou you want to proceed?")) {
            $("#ContentPlaceHolder1_CnfHide").val("1");
        } else {
            $("#ContentPlaceHolder1_CnfHide").val("0");
        }

    }

确认窗口正在出现,但它没有存储值 1 或 0 或在该点停止,它只是传递了函数后面代码中的所有行

【问题讨论】:

  • 调试的时候能看到CnfHide的值被改变了吗?另外,你能在控制台上看到任何错误吗?
  • 没有错误,它只是通过,然后我能够看到确认弹出窗口
  • 但是在你响应确认对话框之后,你能看到控件得到了返回值吗?我的意思是,使用 FF Firebug 会更容易(检查元素)。
  • 我不知道 c# 但 javascript 代码似乎使用 jQuery,在 jquery 中你只能使用 .val() 输入元素,使用 .html() 代替或 .text() 其他元素
  • $("#ContentPlaceHolder1_CnfHide").length 的值是多少;何时调用Confirm

标签: c# javascript jquery asp.net


【解决方案1】:

您可以使用 PopUpextender 并像在 java 脚本中一样开发确认 参考帖子 http://www.codeproject.com/Questions/185470/Javascript-confirm-message-from-code-behind

或者像这样在.cs代码中试试

字符串 msg1; msg1 = "confirm('您确定要删除 Madhuri 的数据...!');"; if (!ClientScript.IsStartupScriptRegistered("error")) { RegisterStartupScript("错误", msg1); }

【讨论】:

    【解决方案2】:

    要在客户端使用confirm(),您确实需要从函数中返回一个值。例如

    function Confirm() {
    
        var result = confirm("Some columns are being used in other reports, removing those columns from query builder will lead to remove all related reports. Dou you want to proceed?");
    
        if (result) {
            $("#ContentPlaceHolder1_CnfHide").val("1");
        } else {
            $("#ContentPlaceHolder1_CnfHide").val("0");
        }
    
        return result;
    
    }
    

    如果你没有从函数中返回 true 或 false,那么它将总是“传递函数后面代码中的所有行”。

    【讨论】:

    • 我将值存储在隐藏字段中,然后检查它
    • @pavezalam #ContentPlaceHolder1_CnfHide 是元素的实际ID吗?如果这是 asp.net,那么 ID 可能是错误的。
    • 我是从页面视图源中获取的,并且我对其他功能使用相同的概念,并且它正在工作,所以我认为 id 没有任何问题
    【解决方案3】:

    有几种方法可以解决此问题。

    1. 您的选择器没有返回任何元素

      Confirm函数改成这样:

      function Confirm() {
        console.log($("#ContentPlaceHolder1_CnfHide").length);
      }
      

      如果返回 0,请通过在浏览器中查看页面源来搜索生成的标记以查找 CnfHide,并检查 id 是否与您的选择器匹配。

      当您使用 ASP.NET 时,您可能希望使用这个方便的函数,该函数将返回 ID 以您指定的值结尾的元素。当您将元素包装在另一个服务器端控件中时,这很方便。

      $.extend({
        clientID: function (id) {
          return $("[id$='" + id + "']");
        }
      });
      

      用法:$.clientID('CnfHide').val("0");

    2. 脚本没有发送到客户端

      您可以通过在浏览器中查看页面来源并搜索if (confirm("Some columns are being use之类的内容来确认这一点

      如果您在页面上没有找到此字符串,那么您需要找出为什么 ScriptManager 类没有向客户端发送此数据。

      这里有一些资源可以帮助您识别服务器端问题

      Startup script registered with ScriptManager.RegisterStartupScript is not rendered to page

      Client method called by ScriptManager.RegisterStartupScript not firing

      Client side script won't execute with ScriptManager

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多