parametros - llamar metodo c# desde jquery
Llamar a la funciĆ³n de JavaScript desde CodeBehind (17)
¿Alguien puede dar buenos ejemplos de llamar a una función de JavaScript desde CodeBehind y viceversa?
Así es como lo hice.
El marcado HTML que muestra un control de etiqueta y botón es el siguiente.
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblJavaScript" runat="server" Text=""></asp:Label>
<asp:Button ID="btnShowDialogue" runat="server" Text="Show Dialogue" />
</div>
</form>
</body>
La función de JavaScript está aquí.
<head runat="server">
<title>Calling javascript function from code behind example</title>
<script type="text/javascript">
function showDialogue() {
alert("this dialogue has been invoked through codebehind.");
}
</script>
</head>
El código detrás para activar la función de JavaScript está aquí.
lblJavaScript.Text = "<script type=''text/javascript''>showDialogue();</script>";
C # a JavaScript: puede registrar el script block para que se ejecute en la página de la siguiente manera:
ClientScript.RegisterStartupScript(GetType(),"hwa","alert(''Hello World'');",true);
reemplace la parte de alert()
con su nombre de función.
Para llamar al método C # desde JavaScript, puede usar ScriptManager
o jQuery
. Yo personalmente uso jQuery
. WebMethod
decorar el método que desea llamar desde JavaScript con el atributo WebMethod
. Para obtener más información sobre PageMethod
llamar al método C # (llamado PageMethod
) de jQuery
, puede consultar la publicación de Dave Ward .
Ejemplo de trabajo: _
<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage2.Master" AutoEventWireup="true" CodeBehind="History.aspx.cs" Inherits="NAMESPACE_Web.History1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="ajax" %>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
function helloFromCodeBehind() {
alert("hello!")
}
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<div id="container" ></div>
</asp:Content>
Código detrás
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace NAMESPACE_Web
{
public partial class History1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "helloFromCodeBehind()", true);
}
}
}
Posibles escollos: -
- Código y HTML pueden no estar en el mismo espacio de nombres
-
CodeBehind="History.aspx.cs"
apunta a una página incorrecta - La función JS está teniendo algún error
He estado notando que muchas de las respuestas aquí están usando ScriptManager.RegisterStartupScript
y si va a hacer eso, esa no es la manera correcta de hacerlo. La forma correcta es usar ScriptManager.RegisterScriptBlock([my list of args here])
. La razón es que solo debería usar RegisterStartupScript cuando su página se carga (de ahí el nombre RegisterStartupScript).
En VB.NET:
ScriptManager.RegisterClientScriptBlock(Page, GetType(String), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", True)
Cª#:
ScriptManager.RegisterClientScriptBlock(Page, typeof(string), "myScriptName" + key, $"myFunctionName({someJavascriptObject})", true);
Por supuesto, espero que no hace falta decir que necesita reemplazar la clave con su identificador de clave y probablemente debería mover todo esto a un sub / función / método y pasar la clave y algún objeto de JavaScript (si su método javascript requiere que su argumento sea un objeto javascript).
Documentos de MSDN:
https://msdn.microsoft.com/en-us/library/bb338357(v=vs.110).aspx
IIRC Code Behind está compilado en el servidor y JavaScript se interpreta del lado del cliente. Esto significa que no hay un vínculo directo entre los dos.
Lo que puede hacer, por otro lado, es que el cliente y el servidor se comuniquen a través de una herramienta ingeniosa llamada AJAX. http://en.wikipedia.org/wiki/Asynchronous_JavaScript_and_XML
No puede invocar una función de Javascript desde CodeBehind porque el archivo CodeBehind contiene el código que ejecuta el servidor en el servidor web. El código Javascript se ejecuta en el navegador web en el lado del cliente.
No puedes hacer esto directamente. Javascript es interpretado por el navegador y C # por el servidor. Lo que puede hacer para llamar a un método desde el servidor usando javscript es
- use webmethod como atributo en los métodos de destino.
- agregar la configuración de ScriptManager EnablePageMethods como verdadero
- agregue código javascript para llamar a los métodos a través del objeto PageMethods
De esta manera: paso 1
public partial class Products : System.Web.UI.Page
{
[System.Web.Services.WebMethod()]
[System.Web.Script.Services.ScriptMethod()]
public static List<Product> GetProducts(int cateogryID)
{
// Put your logic here to get the Product list
}
paso 2: agregar scriptmanager en la página
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" />
paso 3: llamar al método usando javascript
function GetProductsByCategoryID(categoryID)
{
PageMethods.GetProducts(categoryID, OnGetProductsComplete);
}
Eche un vistazo a este enlace.
Para llamar a una función de javascript desde el servidor, puede utilizar un RegisterStartipScript:
ClientScript.RegisterStartupScript(GetType(),"id","callMyJSFunction()",true);
No puedes. Codebehind se ejecuta en el servidor mientras JavaScript se ejecuta en el cliente.
Sin embargo, puede agregar <script type="text/javascript">someFunction();</script>
a su salida y así llamar a la función JS cuando el navegador está analizando su marcado.
Otra cosa que podría hacer es crear una variable de sesión que se establece en el código subyacente y luego verificar el estado de esa variable y luego ejecutar su javascript. Lo bueno es que esto le permitirá ejecutar su script justo donde lo desea, en lugar de tener que averiguar si desea que se ejecute en DOM o globalmente.
Algo como esto: Código detrás:
Session["newuser"] = "false"
En javascript
var newuser = ''<%=Session["newuser"]%>'';
if (newuser == "yes")
startTutorial();
Puede exponer los métodos de C # en páginas subyacentes de código para que se puedan llamar mediante JavaScript utilizando el atributo ScriptMethod .
No puede llamar a JavaScript desde un CodeBehind, ese código existe únicamente en el cliente.
Puedes intentar esto:
Page.ClientScript.RegisterStartupScript(this.GetType(),"CallMyFunction","MyFunction()",true);
Puedes usar literal:
this.Controls.Add(new LiteralControl("<script type=''text/javascript''>myFunction();</script>"));
Si necesita enviar un valor como parámetro.
string jsFunc = "myFunc(" + MyBackValue + ")";
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "myJsFn", jsFunc, true);
Usé ScriptManager en Code Behind y funcionó bien.
ScriptManager.RegisterStartupScript(UpdatePanel1, UpdatePanel1.GetType(), "CallMyFunction", "confirm()", true);
Si está utilizando UpdatePanel en ASP Frontend. Luego, ingrese el nombre de UpdatePanel y el ''nombre de la función'' definidos con las etiquetas de script.
esto funciona para mí
object Json_Object=maintainerService.Convert_To_JSON(Jobitem);
ScriptManager.RegisterClientScriptBlock(this,GetType(), "Javascript", "SelectedJobsMaintainer("+Json_Object+"); ",true);
Llamar a una función de JavaScript desde el código detrás
Paso 1 Agrega tu código Javascript
<script type="text/javascript" language="javascript">
function Func() {
alert("hello!")
}
</script>
Paso 2 Agregue 1 Script Manager en su formulario web y agregue 1 botón también
Paso 3 Agregue este código en su evento de clic de botón
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
ScriptManager.RegisterStartupScript(this, this.Page.GetType(),"updatePanel1Script", "javascript:ConfirmExecute()",true/>