簡體   English   中英

如何從JavaScript調用C#函數?

[英]How to call a C# function from JavaScript?

我想從JavaScript調用CsharpFunction ,這是代碼隱藏的C#函數。 我嘗試了下面的代碼,但是無論JavaScript條件是True還是FalseCsharpFunction調用CsharpFunction

JavaScript代碼:

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

后面的C#代碼:

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

如何從JavaScript調用C#函數?

您可以使用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
}
.CS File    
    namespace Csharp
    {
      public void CsharpFunction()
      {
        //Code;
      }
    }

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

注意:在JS Function中,當調用您的CS頁面函數時。...項目的名稱,然后是CS頁面的名稱空間的名稱,然后是函數名稱

現代方法是將ASP.NET Web API 2 (服務器端)與jQuery Ajax(客戶端)一起使用。

像頁面方法和ASMX Web方法一樣,Web API允許您在ASP.NET中編寫C#代碼,這實際上可以從瀏覽器或任何地方調用!

這是一個示例Web API控制器,它公開了API方法,這些方法允許客戶端檢索有關一種或所有產品的詳細信息(在現實世界中,產品很可能是從數據庫中加載的):

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 Forms項目中。 在這種情況下,您將需要在Global.asax文件的Application_Start方法中添加路由指令:

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

文獻資料

服務器端功能位於服務器端,客戶端功能位於客戶端。 您所要做的是必須設置隱藏的表單變量並提交表單,然后在頁面上使用Page_Load處理程序可以訪問變量的值並調用服務器方法。

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

如果要從客戶端進行服務器調用,則應使用Ajax-查看類似Jquery的東西,並使用$ .Ajax()或$ .getJson()來調用服務器函數,具體取決於您返回的是哪種類型您要執行的動作或動作。

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

你不能 Javascript運行客戶端,C#運行服務器端。

實際上,您的服務器將運行所有C#代碼,並生成 Javascript。 然后,JavaScript將在瀏覽器中運行。 如評論中所述,編譯器不知道Javascript。

要調用服務器上的功能,您必須使用AJAX之類的技術,如其他答案所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM