【问题标题】:ASP.net: Calling a webmethod from ajax javascript. [vb.net]ASP.net:从 ajax javascript 调用 webmethod。 [vb.net]
【发布时间】:2017-02-02 11:13:41
【问题描述】:

我正在动态创建一个带有一些控件的 Popup-Extender。一个控件是具有“onclick”属性并且必须调用 JavaScript 方法提交的 Button。我正在创建 Popup-Extender,它是“SiteMaster.vb”中的控件。按钮的“onclick”属性设置在调用“modalpopup.show”方法的按钮的“click-Event”中。我可以使用浏览器中的开发人员工具看到的创建的 html 代码是:

<input type="submit" name="ctl00$button_buttontestfooter_50_0_0" value="test" onclick="submit();" id="button_buttontestfooter_50_0_0" runat="server">

在我看来,到目前为止一切都很好。我已经在 Site.Master 的源代码中编写了 JavaScript 方法“提交”:

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
<asp:ContentPlaceHolder ID="HeadContent" runat="server">
</asp:ContentPlaceHolder>
<script type="text/javascript">
    function submit() {
        alert("blaaaaa");
        console.log("jijijij");
        window.open("http://www.google.de");
        var dataValue = "{'name': 'Niklas'}";
        $.ajax({
            type: 'POST',
            url: "http://localhost:53470/GetCurrentTime",
            data: dataValue,
            contentType: 'application/json',
            dataType:'json',
            error: function (a, b, c) {
                console.log("jijijij")
                alert(a + ":" + b + "::::" + c);
            },
            success: function (data) {
                console.log("hallo");
                alert("" + data);
            }
        });
    }
</script>
</head>

在 Default.aspx.vb 我写了 webmethod:

Public Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub
<System.Web.Services.WebMethod()>
Public Shared Function GetCurrentTime(ByVal name As String) As String
    Return name
End Function

但我感觉 JavaScript 方法从未被调用,因为我在浏览器控制台的日志中看不到这一点,因为我已将 console.log() 方法放在被调用的 JavaScript 函数中。

【问题讨论】:

  • contentType: 'application/jason' 应该是contentType: 'application/json'
  • contentType: 'application/json'dataType:'json' 应该在那里

标签: javascript asp.net vb.net


【解决方案1】:

你使用的输入类型是submit,所以一旦你点击这个按钮,它就不会调用javascript函数,而是直接提交表单。因此,请改为使用 type="button" 来调用 JavaScript 函数

【讨论】:

  • 问题是,我用 vb.net 创建了一个新按钮。在后面的代码中。那么我该如何更改 type = "Button"... input type="submit" 是由 Visual Studio 创建的...
  • 你能告诉我生成那个按钮的代码吗?如果你也显示 .aspx 代码会更好
  • 当我点击这个按钮时,弹出窗口消失了...... @hdkhardik
  • 即使我在 JavaScript 方法提交的开头放置了一个警报,它也不会显示警报 (alert("blaaaaa");)
【解决方案2】:
Private Sub ButtonClick(sender As Object, e As EventArgs)
    Dim LayoutDef As ASPGlobalHandling.LayoutDefinition = p.Layout_Load("sessionitem_layouts", 0, "footer", "", False)
    ctrl.Container_LoadControls(updPnlContent.ContentTemplateContainer, 0, LayoutDef.Layout, "", 0)
    Dim c3po As Control = p.Container_FindControl(updPnlContent, "button_buttontestfooter_50_0_0")
    If TypeOf (c3po) Is Button Then
        Beep()
        Dim c3po1 As Button = CType(c3po, Button)
        c3po1.Text = "test"
        c3po1.Attributes.Add("OnClientClick", "submit();")
    End If
    modalPopUp.Show()
End Sub

这是我调用 modalpopup.show 的按钮事件。在方法加载 Container_LoadControls 按钮正在生成。后来我添加属性 onklick

【讨论】:

  • 当我点击这个按钮时,弹出窗口消失了...... @hdkhardik
  • 像这样添加属性,c3po1.Attributes.Add("OnClientClick", "submit();")
  • 弹出窗口现在没有消失 :) 但警报仍然没有显示。
  • 您是否检查过该函数是否被调用?
  • 我想在警报的帮助下检查它...我想,当我看到警报时,我可以确定调用了 javascriptfunction。警报();如果提交 javascriptfunction,则函数在开头。
【解决方案3】:

我刚刚看到可以从未在 ButtonClick()-Event 中创建的按钮调用 Javascript 方法“提交”。有人有解决方案吗?

【讨论】: