【问题标题】:How to call a C# function from JavaScript?如何从 JavaScript 调用 C# 函数?
【发布时间】:2013-08-28 18:28:17
【问题描述】:

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

JavaScript 代码:

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

后面的C#代码:

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

如何从 JavaScript 调用 C# 函数?

【问题讨论】:

  • 你这样做的方式是错误的。您编写的代码在服务器上执行,服务器不知道您的 javascript 条件。您可能想要使用 AJAX。
  • 对不起半生不熟的答案!好吧,您可以在隐藏字段中使用表单发送您的条件,然后您可以检查其是否调用该方法的值。
  • 你应该使用 Ajax 库
  • 感谢大家这么有帮助的评论!我很感激你的努力,非常感谢!但是谁能给我一个如何使用ajax的例子!!

标签: javascript c# asp.net code-behind


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

如果您打算从客户端进行服务器调用,您应该使用 Ajax - 查看类似 Jquery 并使用 $.Ajax() 或 $.getJson() 来调用服务器函数,具体取决于哪种类型你追求的回报或你想要执行的行动。

【讨论】:

    【解决方案3】:

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

    更多信息可以找到herehere

    【讨论】:

      【解决方案4】:

      您可以使用 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
      }
      

      【讨论】:

      • 您的示例调用的是 c# 代码页,而不是函数。
      • 我喜欢这个解决方案,但是默认的 IIS/ASP.NET 权限不允许$.ajax(...) 在没有身份验证的情况下调用控制器(这很好)。难道没有一种简单的方法可以调用控制器而不必降低页面的安全性吗?
      【解决方案5】:
      .CS File    
          namespace Csharp
          {
            public void CsharpFunction()
            {
              //Code;
            }
          }
      
          JS code:
          function JSFunction() {
                  <%#ProjectName.Csharp.CsharpFunction()%> ;
          }
      

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

      【讨论】:

      • 如果你没有找到你的函数,试着把它改成static
      • 如何处理返回值?
      【解决方案6】:

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

      与页面方法和 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 Help Pages 和/或Swashbuckle

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

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

      文档

      【讨论】:

        【解决方案7】:

        使用 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)
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-20
          • 1970-01-01
          • 2023-03-28
          • 2012-12-07
          • 1970-01-01
          相关资源
          最近更新 更多