30

我想CsharpFunction从 JavaScript 调用代码隐藏中的 C# 函数。我尝试了下面的代码,但无论 JavaScript 条件是True还是FalseCsharpFunction都被调用了!

JavaScript 代码:

if (Javascriptcondition > 0) {
   <%CsharpFunction();%>
}

后面的 C# 代码:

protected void CsharpFunction()
{
  // Notification.show();
}

如何从 JavaScript 调用 C# 函数?

4

7 回答 7

37

您可以使用 Web 方法和 Ajax:

<script type="text/javascript">             //Default.aspx
   function DeleteKartItems() {     
         $.ajax({
         type: "POST",
         url: 'Default.aspx/DeleteItem',
         data: "",
         contentType: "application/json; charset=utf-8",
         dataType: "json",
         success: function (msg) {
             $("#divResult").html("success");
         },
         error: function (e) {
             $("#divResult").html("Something Wrong.");
         }
     });
   }
</script>

[WebMethod]                                 //Default.aspx.cs
public static void DeleteItem()
{
    //Your Logic
}
于 2014-06-20T19:40:32.613 回答
7
.CS File    
    namespace Csharp
    {
      public void CsharpFunction()
      {
        //Code;
      }
    }

    JS code:
    function JSFunction() {
            <%#ProjectName.Csharp.CsharpFunction()%> ;
    }

注意:在调用您的 CS 页面函数时在 JS 函数中......首先是项目名称,然后是 CS 页面的命名空间名称,然后是函数名称

于 2016-04-25T08:17:19.927 回答
3

一种现代方法是将ASP.NET Web API 2(服务器端)与 jQuery Ajax(客户端)结合使用。

与页面方法和 ASMX Web 方法一样,Web API 允许您在 ASP.NET 中编写 C# 代码,这些代码可以从浏览器或任何地方调用,真的!

这是一个示例 Web API 控制器,它公开了 API 方法,允许客户端检索有关 1 个或所有产品的详细信息(在现实世界中,产品可能会从数据库加载):

public class ProductsController : ApiController
{
    Product[] products = new Product[] 
    { 
        new Product { Id = 1, Name = "Tomato Soup", Category = "Groceries", Price = 1 }, 
        new Product { Id = 2, Name = "Yo-yo", Category = "Toys", Price = 3.75M }, 
        new Product { Id = 3, Name = "Hammer", Category = "Hardware", Price = 16.99M } 
    };

    [Route("api/products")]
    [HttpGet]
    public IEnumerable<Product> GetAllProducts()
    {
        return products;
    }

    [Route("api/product/{id}")]
    [HttpGet]
    public IHttpActionResult GetProduct(int id)
    {
        var product = products.FirstOrDefault((p) => p.Id == id);
        if (product == null)
        {
            return NotFound();
        }
        return Ok(product);
    }
}

控制器使用这个示例模型类:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }
    public decimal Price { get; set; }
}

用于获取和迭代产品列表的示例 jQuery Ajax 调用:

$(document).ready(function () {
    // Send an AJAX request
    $.getJSON("/api/products")
        .done(function (data) {
            // On success, 'data' contains a list of products.
            $.each(data, function (key, item) {
                // Add a list item for the product.
                $('<li>', { text: formatItem(item) }).appendTo($('#products'));
            });
        });
});

这不仅使您可以轻松地创建现代 Web API,如果您需要变得非常专业并记录它,您也可以使用ASP.NET Web API 帮助页面和/或Swashbuckle

Web API 可以改装(添加)到现有的 ASP.NET Web 窗体项目。在这种情况下,您需要将路由指令添加到Application_Start文件中的方法中Global.asax

RouteTable.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = System.Web.Http.RouteParameter.Optional }
);

文档

于 2018-03-13T15:10:51.997 回答
2

使用 Blazor http://learn-blazor.com/architecture/interop/

这是C#:

namespace BlazorDemo.Client
{
   public static class MyCSharpFunctions
   {
       public static void CsharpFunction()
       {
          // Notification.show();
       }
   }
}

然后是Javascript:

const CsharpFunction = Blazor.platform.findMethod(
"BlazorDemo.Client",
"BlazorDemo.Client",
"MyCSharpFunctions",
"CsharpFunction"
);
if (Javascriptcondition > 0) {
   Blazor.platform.callMethod(CsharpFunction, null)
}
于 2018-06-25T22:43:46.510 回答
1

服务器端功能在服务器端,客户端功能驻留在客户端。您可以做的是您必须设置隐藏的表单变量并提交表单,然后在页面使用Page_Load处理程序上您可以访问变量的值并调用服务器方法。

更多信息可以在这里这里 找到

于 2013-08-26T09:50:13.930 回答
0

如果您打算从客户端进行服务器调用,则应该使用 Ajax - 查看 Jquery 之类的东西并使用 $.Ajax() 或 $.getJson() 调用服务器函数,具体取决于您的返回类型'在您想要执行的操作或操作之后。

于 2013-08-26T09:49:54.797 回答
-5

你不能。Javascript 运行客户端,C# 运行服务器端。

实际上,您的服务器将运行所有 C# 代码,生成Javascript。然后,Javascript 在浏览器中运行。正如评论中所说,编译器不知道Javascript。

要调用服务器上的功能,您必须使用 AJAX 等技术,如其他答案中所述。

于 2013-08-26T09:45:53.873 回答