繁体   English   中英

直接调用javascript function中的C#方法

[英]Call C# method in javascript function directly

如何在 javascript function 中直接调用 c# 方法。 (例如页面后面代码的page_load方法)。 请帮我。

要在客户端事件上调用服务器端方法,您需要执行以下操作:

1-创建服务器端方法:

void DoSomething(...) { ... }

2- 实现System.Web.UI.IPostBackEventHandler.RaisePostBackEvent采用一个字符串参数(您可以将名称分配给此参数的值)。:

public void RaisePostBackEvent(string eventArgument) 
{
        DoSomething(...);
}

3-编写脚本以触发回发:

function TriggerPostBack(control, arg){
    __doPostBack(control, arg);
}

4- 需要时调用 PostBack 触发器 function:

<a .... onclick="TriggerPostBack('control', 'arg')" .. /> 

您有多种选择,每种选择都有其优点和缺点。

  • 如果要调用 page_Load 事件,只需重新加载页面: window.location.reload()就会调用页面的加载事件。
  • 如果您想使用异步执行此操作,则必须使用 XMLHttpRequest(即使用 Ajax 库)。 您可以使用jQueryAjax.Net Professional或 ASP.NET Ajax 的更新面板。

如果您想从 JavaScript 调用 C# 中的方法,我将使用 web 方法。 下面提供了一个示例。 我希望这会有所帮助。

ASP.NET - 以下 HTML 标记由 ASP.Net 文本框和 HTML 按钮组成。

<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<input id="btnGetTime" type="button" value="Show Current Time"
   onclick = "ShowCurrentTime()" />

JavaScript Code: - When the Button is clicked the ShowCurrentTime JavaScript function is executed which makes an AJAX call to the GetCurrentTime WebMethod. TextBox 的值作为参数传递给 WebMethod。

<script type = "text/javascript">

function ShowCurrentTime() {
$.ajax({
    type: "POST",
    url: "CS.aspx/GetCurrentTime", //Type name of your class here e.g student.aspx/Method
    data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: OnSuccess,
    failure: function(response) {
        alert(response.d);
    }
});
}

function OnSuccess(response) {
    alert(response.d);
}

</script>

WebMethod - 以下 WebMethod 向用户返回问候消息以及当前服务器时间。 需要注意的重要一点是,该方法被声明为 static (C#),这是必要的,否则将不会从客户端 jQuery AJAX 调用调用该方法。

C#

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

javascript 是客户端,page_load 是服务器端。 我认为您可以这样调用该方法。 可能您可以仅为该方法创建一个单独的页面并通过 ajax 拨打电话

简单的答案:你不能(至少是 page_load)。 清楚地了解什么是服务器端代码和客户端代码。

调用服务器端方法的其他选项是使用 AJAX。 读。

您可以创建一个ASHX 处理程序,在其中执行您要运行的 C# 方法,然后使用AJAX/jQuery调用该处理程序。

我不特别了解 c#,但是客户端与服务器端通信的一个好方法是通过RPC(远程过程调用)实现。
假设您使用JSON-RPC
首先,创建代表请求的 json object:

var request = {
    "method": "echo", 
    "params": ["Hello JSON-RPC"],
    "id": 1
}

其中方法代表您正在调用的 function 名称,
params表示指定的 function 应该采用的一系列参数,
id是请求对象的唯一标识符。

然后你想将此请求发送到服务器。 这应该使用 ajax 来完成。 假设您有一个 function 来处理名为sendAjaxRequest的 ajax 请求,该请求采用 3 个参数:

  1. 服务器端目标脚本
  2. 请求 object
  3. 处理响应的回调

    sendAjaxRequest(scriptUrl,request,function(response){ alert("the server responded with: "+response.result); });

服务器接收请求,解释它并使用所需参数执行方法并构造响应 json object:

{
   "result": "Hello JSON-RPC", 
   "error": null, 
   "id": 1
}

并将其发送回客户端。

这是一个非常好的做法,无论情况如何。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM