[英]How to call a C# function from JavaScript?
我想從JavaScript調用CsharpFunction
,這是代碼隱藏的C#函數。 我嘗試了下面的代碼,但是無論JavaScript條件是True
還是False
, CsharpFunction
調用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 }
);
如果要從客戶端進行服務器調用,則應使用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.