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?

24
demandé sur Stephen Kennedy 2013-08-26 13:44:31

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
}
31
répondu user3098137 2018-03-13 17:42:24
.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

2
répondu Vijay Mungara 2016-04-25 08:17:19

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.

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

1
répondu Rohit 2017-05-23 11:53:20

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

1
répondu Stephen Kennedy 2018-03-13 15:10:51

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.

0
répondu Russell Young 2013-08-26 09:49:54

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)
}
0
répondu Patrick Knott 2018-06-25 22:43:46

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.

-5
répondu Bart Friederichs 2015-11-24 08:01:59