【问题标题】:Calling C# code behind method using javascript without ajax使用没有ajax的javascript调用方法后面的C#代码
【发布时间】:2015-07-31 09:43:05
【问题描述】:

我的 asp.net 文件中有 2 个按钮

<asp:Button ID="BTN_Send_LA" runat="server" Text="Save" OnClientClick="ConfirmSendData()"></asp:Button>
//The button the client will click

<asp:Button ID="UploadButton" runat="server" Text="" OnClick="BTN_Send_LA_Click"/>
//Dummy Button for the JS .click()

这是我的 Js 部分:

function ConfirmSendData() {
    var r = confirm("Êtes vous bien: " + document.getElementById("<%=DDL_LaveurLA.ClientID%>").options[document.getElementById("<%=DDL_LaveurLA.ClientID%>").selectedIndex].text + " sinon veuillez changer dans le champ spécifié 'Laveur'");

    if (r == true) {

        var clickButton = document.getElementById("<%= UploadButton.ClientID %>");
        clickButton.click();

        //$('UploadButton').trigger('click'); TEST 1
        //__doPostBack not working aswell

    }
}

所以这里是我期望做的:

  1. 客户端点击第一个按钮(触发JS)=> Works
  2. R 为真 => 有效
  3. JS部分触发UploadButton的Onclick => Don't Work

我不明白为什么这种方法不起作用,因为它似乎是大多数其他答案在 StackOverflow 上采用的一般方法?

更新:

好的,我已经尝试了下面提出的所有解决方案,现在我遇到了奇怪的问题:

当我点击客户端按钮时,以下 3 件事中的 1 件随机发生(路由跟随调试器)

1:按钮单击执行空白回发(IsPostBack == true) 事件 OnClick="BTN_Send_LA_Click" 未触发

2:按钮单击执行空白回发(IsPostBack == false) 事件 OnClick="BTN_Send_LA_Click" 未触发

3:按钮正确触发虚拟按钮的 OnClick="BTN_Send_LA_Click" 事件。

我不明白为什么。当我直接点击虚拟按钮时,一切正常

每次我执行 CTRL+F5 时,我第一次单击客户端按钮时都会 100% 工作(触发事件)

其他:在我的事件 BTN_Send_LA_Click() 中,我更改了多个控件的背景颜色(浅绿色)

1:如果我点击虚拟按钮 => 控件的背景颜色会改变

2:如果我点击客户端按钮,即使 BTN_Send_LA_Click() 被触发,背景颜色也不会改变。

为什么?我完全迷失了这个

更新代码:

        function ConfirmSendData()
     {
            /*
            var dd = document.getElementById("<%=DDL_LaveurLA.ClientID%>");
            var txt = dd.options[dd.selectedIndex].text;
            var r = confirm("Êtes vous bien: " + txt + " sinon veuillez changer dans le champ spécifié 'Laveur'"); */

            var r = confirm("Êtes vous bien: " + document.getElementById("<%=DDL_LaveurLA.ClientID%>").options[document.getElementById("<%=DDL_LaveurLA.ClientID%>").selectedIndex].text + " sinon veuillez changer dans le champ spécifié 'Laveur'");

            if (r == true) {
                //$("#<%=UploadButton.ClientID%>").click();

                var clickButton = document.getElementById("<%= UploadButton.ClientID %>");
                clickButton.click();

            }
            return false;  
    }

【问题讨论】:

  • 你试过$("#&lt;%=UploadButton.ClientID%&gt;").click();吗?
  • 欢迎来到 StackOverflow。请注意,通常问题都保持在相当专业的水平,因此您不会期望在问题中看到像 guyz 这样的词。
  • 哪一部分不起作用,获取元素还是触发点击事件? clickEvent 赋值后包含什么?
  • @aw04 触发事件随机发生(检查更新部分)

标签: javascript c# jquery asp.net ajax


【解决方案1】:

除了:

  1. 您需要在您的 if 声明中结束 }
  2. ConfirmSendData() 需要return false 防止第一个按钮提交。

function ConfirmSendData() {
    var r = confirm("Êtes vous bien...");
    if (r == true) {
        var clickButton = document.getElementById("<%= UploadButton.ClientID %>");
        clickButton.click();
    }
    return false;
}

【讨论】:

  • 好地方@stovroz。虽然它还需要将return 添加到OnClientClick
  • 您好,感谢您的帮助,我已经更新了最初的问题,因为它是随机工作的
【解决方案2】:

您已将以下内容注释掉,我想这意味着您已经尝试过但没有成功...

//$('UploadButton').trigger('click'); TEST 1

jQuery 需要在元素 ID 前加上 # 字符才能找到它,所以试试这个吧……

$("#<%=UploadButton.ClientID%>").click();

我还将通过仅找到一次下拉元素将函数的第一部分稍微更新为更易读(和高效)的版本...

var dd = document.getElementById("<%=DDL_LaveurLA.ClientID%>");
var txt = dd.options[dd.selectedIndex].text;
var r = confirm("Êtes vous bien: " + txt + " sinon veuillez changer dans le champ spécifié 'Laveur'");

【讨论】:

  • 这不就是上面 javascript 代码的 jquery 等价物吗?
  • 可能是@aw04,但我知道我过去在使用.click(); 时遇到过跨浏览器问题(现在不记得具体是什么了),所以倾向于使用jQuery 版本。您可能是正确的,如果得到证实,很高兴撤回答案
  • 我只是对推理感到好奇,IMO 仍然是一个有用的答案。
  • 您好,感谢您的帮助,我已经更新了最初的问题,因为它是随机工作的(使用您的解决方案)
【解决方案3】:

您应该使用$("#&lt;%=UploadButton.ClientID%&gt;") 而不是$('UploadButton'),因为asp:Button 元素生成的不是只有id UploadButton 的元素

function ConfirmSendData() {
    var r = confirm("Êtes vous bien: " + document.getElementById("<%=DDL_LaveurLA.ClientID%>").options[document.getElementById("<%=DDL_LaveurLA.ClientID%>").selectedIndex].text + " sinon veuillez changer dans le champ spécifié 'Laveur'");

    if (r == true) {

        var clickButton = document.getElementById("<%= UploadButton.ClientID %>");
        clickButton.click();

        // alternative variant for jquery
        // $("#<%=UploadButton.ClientID%>").click();
    }

}

另外一个功能 ConfirmSendData 需要 return false 以防止通过第一个按钮提交数据

【讨论】:

  • 虽然这是正确的,但它并不能解释为什么 javascript 部分不起作用。你的例子只是用 jquery 再次做同样的事情。
  • @aw04 它不起作用,因为 jquery 选择器 $('UploadButton') 找不到元素,因为这是 asp:Button 动态 ID="UploadButton"
  • 我明白了,你当然是对的,但我说的是上面的 javascript 代码基本上做同样的事情。
  • @aw04 第一个 js 代码是原生 js,第二个是 jquery 等价的。他们有不同的唯一标志#,这需要jquery通过id查找元素
  • 是的,但您没有更改本机 javascript 部分。如果它不起作用,是什么让您认为 jquery 替代方案会起作用?
【解决方案4】:

试试这个:

__doPostBack('<%= UploadButton.UniqueID %>', '');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多