Comment appeler une fonction C# à partir de JavaScript?
je veux appeler CsharpFunction
, une fonction C# en code-behind, À partir de JavaScript. J'ai essayé le code ci-dessous mais si la condition JavaScript est True
ou False
, CsharpFunction
a été appelé indépendamment!
code JavaScript:
if (Javascriptcondition > 0) {
<%CsharpFunction();%>
}
C# code derrière:
protected void CsharpFunction()
{
// Notification.show();
}
comment appeler une fonction C# à partir de JavaScript?
7 réponses
vous pouvez utiliser une méthode Web et 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()%> ;
}
Note :dans la fonction JS lorsque vous appelez votre fonction de page CS.... nom du projet Nom du projet espace de nom de la page CS nom de la fonction
les fonctions côté serveur sont du côté serveur, les fonctions côté client résident sur le client.
Ce que vous pouvez faire est que vous devez définir la variable de forme cachée et soumettre le formulaire, puis sur l'utilisation de la page Page_Load
handler, vous pouvez accéder à la valeur de la variable et appeler la méthode du serveur.
une approche moderne est d'utiliser ASP.NET API Web 2 (côté serveur) avec jQuery Ajax (côté client).
comme les méthodes de page et les méthodes ASMX web, L'API Web vous permet d'écrire du code C dans ASP.NET qui peut être appelé à partir d'un navigateur ou de n'importe où, vraiment!
voici un exemple de contrôleur D'API Web, qui expose les méthodes D'API permettant aux clients de récupérer des détails sur 1 ou tous les produits (dans le monde réel, les produits seraient probablement chargé à partir d'une base de données):
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);
}
}
le contrôleur utilise cet exemple de classe de modèle:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public decimal Price { get; set; }
}
exemple D'appel Ajax de jQuery pour obtenir et itérer sur une liste de produits:
$(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'));
});
});
});
non seulement cela vous permet de facilement créer une API Web moderne, vous pouvez si vous avez besoin d'obtenir vraiment professionnel et de le documenter aussi, en utilisant ASP.NET pages D'aide de L'API Web et / ou Swashbuckle .
API Web peut être rétro-ajusté (ajouté) à un ASP.NET projet de formulaires Web. Dans ce cas, vous devrez ajouter des instructions d'acheminement dans la méthode Application_Start
dans le fichier Global.asax
:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Documentation
- tutoriel: pour commencer ASP.NET Web API 2 (c#)
- Tutoriel pour ceux avec sites patrimoniaux: utilisant L'API Web avec ASP.NET formulaires Web
- MSDN: ASP.NET Web API 2
si vous voulez faire un appel serveur à partir du client, vous devez utiliser Ajax - regardez quelque chose comme Jquery et utilisez $.Ajax() ou $.getJson () appelle la fonction server, en fonction du type de retour que vous recherchez ou de l'action que vous voulez exécuter.
Utiliser Blazor http://learn-blazor.com/architecture/interop /
voici le C#:
namespace BlazorDemo.Client
{
public static class MyCSharpFunctions
{
public static void CsharpFunction()
{
// Notification.show();
}
}
}
puis le Javascript:
const CsharpFunction = Blazor.platform.findMethod(
"BlazorDemo.Client",
"BlazorDemo.Client",
"MyCSharpFunctions",
"CsharpFunction"
);
if (Javascriptcondition > 0) {
Blazor.platform.callMethod(CsharpFunction, null)
}
vous ne pouvez pas. Javascript exécute le côté client, C # exécute le côté serveur.
en fait, votre serveur exécutera tout le code C#, générant Javascript. Le Javascript est alors exécuté dans le navigateur. Comme indiqué dans les commentaires, le compilateur ne connaît pas Javascript.
pour appeler la fonctionnalité sur votre serveur, vous devrez utiliser des techniques telles que AJAX, comme indiqué dans les autres réponses.