我想从 JavaScript 调用
CsharpFunction
,一个代码隐藏中的 C# 函数。我尝试了下面的代码,但无论 JavaScript 条件是True
还是False
,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 函数中调用 CS 页面函数时....项目的名字,然后是 CS 页面的命名空间名称,然后是函数名称
现代方法是使用 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 Forms 项目中。在这种情况下,您需要将路由指令添加到文件中的
Application_Start
方法中 Global.asax
:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
使用 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)
}
如果您打算从客户端进行服务器调用,则应该使用 Ajax - 查看类似 Jquery 的内容并使用 $.Ajax() 或 $.getJson() 来调用服务器函数,具体取决于返回类型您正在执行您想要执行的操作。
I have written this code to get state by country for examples
$(document).ready(function () {
alert('test');
$("#City_CountryId").change(function () {
var countryId = $(this).val();
$.ajax({
url: '@Url.Action("GetStatesByCountry", "City")',
type: 'GET',
//dataType: 'json'
data: { countryId: countryId },
success: function (data) {
$("#City_StateId").empty();
$("#City_StateId").append('<option disabled selected>--Select State--</option>');
// alert(data);
$.each(data, function (i, state) {
// alert(i);
$("#City_StateId").append($('<option></option>').val(state.id).text(state.stateName));
});
}
});
});
你不能。 Javascript 运行客户端,C# 运行服务器端。
事实上,您的服务器将运行所有 C# 代码,生成 Javascript。然后 JavaScript 在浏览器中运行。正如评论中所说,编译器不了解 Javascript。
要调用服务器上的功能,您必须使用 AJAX 等技术,如其他答案中所述。