web-dev-qa-db-fra.com

Comment appeler une fonction C # à partir de JavaScript?

Je veux appeler CsharpFunction, une fonction C # dans code-behind, à partir de JavaScript. J'ai essayé le code ci-dessous, mais que la condition JavaScript soit True ou False, CsharpFunction a été appelé malgré tout!

Code JavaScript:

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

Code C # derrière:

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

Comment appeler une fonction C # à partir de JavaScript?

25
IamNumber5

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
}
31
user3098137
.CS File    
    namespace Csharp
    {
      public void CsharpFunction()
      {
        //Code;
      }
    }

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

Remarque: dans Fonction JS lorsque vous appelez votre fonction de page CS .... nom du projet puis nom de l'espace de nom de la page CS puis nom de la fonction 

4
Vijay Mungara

Une approche moderne consiste à utiliser l’API Web ASP.NET 2 (côté serveur) avec jQuery Ajax (côté client).

Comme les méthodes de page et les méthodes Web ASMX, Web API 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 API Web, qui expose des méthodes d'API permettant aux clients de récupérer des détails sur un ou tous les produits (dans le monde réel, les produits seraient probablement chargés à 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 jQuery Ajax pour obtenir et parcourir 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'));
            });
        });
});

Ceci vous permet non seulement de facilement créer une API Web moderne, mais vous pouvez aussi, si vous devez vraiment être professionnel, la documenter à l'aide de Pages d'aide sur l'API Web ASP.NETSwashbuckle .

Les API Web peuvent être ajoutées ultérieurement (ajoutées) à un projet ASP.NET Web Forms existant. Dans ce cas, vous devrez ajouter des instructions de routage à la méthode Application_Start du fichier Global.asax:

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

Documentation

3
Stephen Kennedy

Les fonctions côté serveur sont côté serveur, les fonctions côté client résident sur le client . Ce que vous pouvez faire est de définir la variable de formulaire masquée et de soumettre le formulaire, puis à la page, utiliser le gestionnaire Page_Load, vous pouvez accéder à la valeur. de variable et appelez la méthode du serveur.

Plus d'informations peuvent être trouvées ici Et ici

1
Rohit

Si vous souhaitez passer un appel serveur à partir du client, vous devez utiliser Ajax - regardez quelque chose comme Jquery et utilisez $ .Ajax () ou $ .getJson () pour appeler la fonction serveur, en fonction du type de retour que vous souhaitez. êtes après ou action que vous voulez exécuter. 

0
Russell Young

Utilisez 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)
}
0
Patrick Knott