【问题标题】:onOnClientClick is working but onClick is not working on asp.netonOnClientClick 正在工作,但 onClick 在 asp.net 上不起作用
【发布时间】:2014-03-16 20:06:05
【问题描述】:

我的 javascript 上有这段代码:

         function getListOfPOI() {
            geocoder = new google.maps.Geocoder();
            var address = document.getElementById('tbCity').value;

            geocoder.geocode({ 'address': address }, function (results, status) {
                if (status == google.maps.GeocoderStatus.OK) {
                    map.setCenter(results[0].geometry.location);
                    var request = {
                        location: results[0].geometry.location,
                        radius: 8000,
                        types: all //['store']
                    };
                    infowindow = new google.maps.InfoWindow();
                    var service = new google.maps.places.PlacesService(map);
                    service.nearbySearch(request, callback);
                } else {
                    alert('Geocode was not successful for the following reason: ' + status);
                }
            });

            return true;
        }

我用下面的按钮调用这个函数:

<asp:Button ID="btnAddCity" Height="20px" Text="Add" runat="server" OnClientClick="return getListOfPOI();" OnClick="btnAddCity_Click" UseSubmitBehavior="false"    />

OnClientClick 完美运行,但 OnClick 功能未触发。我该怎么办?提前感谢您的见解。

干杯, 妮莎

【问题讨论】:

  • 你能发布你的html代码吗?您的按钮是否位于更新面板或任何其他面向部分页面呈现的控件中?我不确定,但是否有可能您的 javascript 代码失败并且未返回 true ?我还看到你有一个 id 为“tbCity”的文本框,如果这是一个 asp:textbox 控件,那么你的代码将无法工作,因为 asp 在客户端更改了 id,所以你必须使用编译器指令检索新的客户端 id
  • 我的按钮位于页面上,而不是在面板或任何东西内。我的 Javascript 很好,因为它可以按我的意愿工作。唯一的问题是它没有在服务器端触发我的“btnAddCity_Click”功能。你知道如何使 onClick 起作用吗?
  • btnAddcity_click函数,是你自己写的还是Visual Studio生成的?函数中可能存在链接问题或不正确的变量,当您在设计器视图中双击按钮时,它是关注后面代码中的函数还是创建一个新的 emoty?

标签: javascript asp.net onclick onclientclick


【解决方案1】:

另一种触发 JavaScript 代码 + 服务器代码的方法是执行以下操作,我们使用 ClientScript.RegisterStartupScript 并调用我们的 JavaScript 函数!

在您的 .ASPX 页面中:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script>
        function clientTestClick() {
            document.write("Test!");
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Button ID="TestButton" Text="Test Me" UseSubmitBehavior="false" OnClick="TestButton_Click" runat="server"/>
    </div>
    </form>
</body>
</html>

取决于语言背后的代码..

C#:

protected void TestButton_Click(object sender, EventArgs e)
{
    ClientScript.RegisterStartupScript(Page.GetType, "JavaScript", "clientTestClick();", true);

    /*  PUT YOUR SERVER CODE HERE */
}

VB.NET:

Protected Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click

    ClientScript.RegisterStartupScript(Me.GetType(), "JavaScript", "clientTestClick()",True)

    Dim x As String 
    x="hello" 'You can set a debug-point here and see that this will fire

End Sub

希望这有帮助,请告诉我!

【讨论】:

  • 嗨@lucidgold,感谢您抽出宝贵的时间。我稍微调整了你的答案,现在它正在工作!下面的答案是解决方案。
  • 我很高兴能提供帮助,您能否将我的回答标记为有帮助,以便其他人可以重复使用。谢谢!
【解决方案2】:

在@lucidgold 的帮助下,终于可以正常工作了!解决方案是在按钮服务器端调用javascript函数。经过调整,这里是完整的解决方案:

  1. 我删除了 JavaScript 函数的 return true
  2. 移除按钮上的 useSubmitBehaviour 属性:
    &lt;asp:Button ID="TestButton" Text="Test Me" OnClick="TestButton_Click" runat="server"/&gt;

  3. 在 C# 中运行 RegisterStartupScript,如下所示:
    ClientScript.RegisterStartupScript(GetType(), "script", "&lt;script type ='text/javascript'&gt; getListOfPOI(); &lt;/script&gt;");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多