如何从客户端 JavaScript 函数调用服务器方法背后的代码?

IT技术 c# javascript .net asp.net
2021-01-26 03:18:28

我在 ASPX 页面中有一个用于 HTML 按钮单击事件的 JavaScript 函数。以及其代码隐藏页面中的服务器方法。现在,我想仅在用户单击 HTML 按钮时才使用一些参数从 JavaScript 函数调用服务器方法。

请不要更改此方案,也不要在回复时在 aspx 页面中使用任何 asp.net 控件。因为只允许使用 HTML 控件。谁可以帮我这个事 ?。提前致谢。急切地等待答案。

这是代码,

标记中的代码:

<script language="javascript" type="text/javascript">
    function btnAccept_onclick() {        
        var name;            
        name = document.getElementById('txtName').value;

        // Call Server side method SetName() by passing this parameter 'name'
</script>

<input type="button" id="btnAccept" value="Accept" onclick="return btnAccept_onclick()" />

代码隐藏:

public void SetName(string name)
{
    // Code for some functionality    
}
6个回答

是的,您可以制作一个网络方法,例如..

[WebMethod]
public static String SetName(string name)
{
    return "Your String"
}

然后在 JavaScript 中调用它,例如,

PageMethods.SetName(parameterValueIfAny, onSuccessMethod,onFailMethod);

这也是必需的:

<asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true"></asp:ScriptManager>
启用 PageMethods 时是否存在任何安全问题?我想知道为什么默认情况下禁用它。
2021-03-17 03:18:28

在我的项目中,我们通常这样调用服务器端方法:

在 JavaScript 中:

document.getElementById("UploadButton").click();

服务器端控制:

<asp:Button runat="server" ID="UploadButton" Text="" style="display:none;" OnClick="UploadButton_Click" />

C#:

protected void Upload_Click(object sender, EventArgs e)
{

}
你好。如果我的项目有点击方法,这工作正常。我在 2 个不同的 asp 按钮中有 2 个 js 函数和 2 个不同的 onclick 方法。一种方法被调用,而另一种方法未被调用。这怎么可能?
2021-03-22 03:18:28
@sab669,通过使用他的方法,您将面临一个小问题,即 ClientID 与服务器 ID 不同。添加额外的属性,ClientIDMode = "Static"以便客户端 ID 和服务器 ID 相同。
2021-03-31 03:18:28
在调试时,我收到此错误:JavaScript runtime error: Unable to get property 'click' of undefined or null reference. 该按钮位于我的 aspx 文件中,并且在其背后的代码中定义了附加的事件处理程序。任何的想法?
2021-04-01 03:18:28

如果你不想使用 ajax 比

Code behind 

void myBtn_Click(Object sender,EventArgs e)
{
   //SetName(name); your code
}


.aspx file

<script language="javascript" type="text/javascript">
    function btnAccept_onclick() {        
        var name;            
        name = document.getElementById('txtName').value;
        document.getElementById('callserver').click();
        // Call Server side method SetName() by passing this parameter 'name'
</script>


<div style="dispaly:none;">
  <input type="button" id="callserver" value="Accept" click="myBtn_Click" runat="server" />
</div>
<input type="button" id="btnAccept" value="Accept" onclick="return btnAccept_onclick()" />

或使用页面方法

.cs file
[ScriptMethod, WebMethod]

   public static string docall()
   {
      return "Hello";
   }

.aspx file

<script type="text/javascript">
      function btnAccept_onclic() {
          PageMethods.docall(onSuccess, onFailure);
      }

  function onSuccess(result) {
          alert(result);
      }


      function onFailure(error) {
          alert(error);
      } 

</script>

检查这个:http : //blogs.microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

第二种方法没有任何服务器标签,但您需要使用使用 ajax 的 pagemethod
2021-04-01 03:18:28
感谢您的快速回复,但不要在 aspx 页面中使用任何带有 runat="server" 标记的控件(asp.net 或 HTML)。并且尽可能避免使用ajax。
2021-04-03 03:18:28

JS代码:

<script type="text/javascript">
         function ShowCurrentTime(name) {
         PageMethods.GetCurrentTime(name, OnSuccess);
         }
         function OnSuccess(response, userContext, methodName) {
          alert(response);
         }
</script>

HTML代码:

<asp:ImageButton ID="IMGBTN001" runat="server" ImageUrl="Images/ico/labaniat.png"
class="img-responsive em-img-lazy" OnClientClick="ShowCurrentTime('01')" />

C# 背后的代码

[System.Web.Services.WebMethod]
public static string GetCurrentTime(string name)
{
    return "Hello " + name + Environment.NewLine + "The Current Time is: "
            + DateTime.Now.ToString();
}

我必须将我的 buttonid 注册为 postbacktrigger ......

RegisterPostbackTrigger(idOfButton)