Chiamata di Funzione C# JavaScript/JQuery Nel Asp.net webforms

Così, ho una pagina aspx che assomiglia a questo:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>

Vorrei sapere, come posso scrivere JavaScript (ad es. jQuery) codice chiamare una funzione da mio Codice C#. Diciamo che questo è il mio metodo C#:

protected void XXX(object sender, EventArgs e)
{
    Response.Redirect("pagewho?");
}

Grazie ancora, Alon. 🙂

EDIT:

Questo è il codice completo sto usando momento:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
  <script type="text/javascript">
      validateStuff = function () {
          var isValid = true;
          var txt = document.getElementById("TextBox1");

          if (txt) {
              if (txt.value.toLower() != "james") {
                  isValid = false;
              }
          }
          //perform validation and return true/false
          return isValid;
      }

  </script>
    <form id="form1" runat="server">
    <div>
    <asp:Button ID="Button1" runat="server" OnClientClick="return validateStuff();" OnClick="Button1_Click" />
        <br />
        <br />
        <asp:TextBox ID="TextBox1" runat="server" Height="25px" Width="135px"></asp:TextBox>
        <br />
        <br />
        <br />
    </div>
    </form>
</body>
</html>

ma, non importa quello che sto wireting nella casella di testo, il suo ritorno vero. qualsiasi aiuto?

  • Controllare la mia risposta e vedere se ti aiuta 🙂
InformationsquelleAutor Alon M | 2011-09-16



5 Replies
  1. 6

    È possibile utilizzare __doPostBack dallo script, e utilizzare il RaisePostBackEvent metodo nel codice sottostante per eseguire la logica lato server. Se stai cercando di fare un redirect, questo è probabilmente il modo migliore.

    MODIFICA

    Se stai cercando di fare un po di convalida in JavaScript quando viene cliccato un pulsante, utilizzare OnClientClick per eseguire la convalida JavaScript, e restituisce true se la convalida ha esito positivo.

    <asp:Button ID="Button1" runat="server" OnClientClick="return validateStuff();" OnClick="Button1_Click" />

    Tuo convalida JavaScript:

    validateStuff = function(){
        var isValid = true;
        var txt = document.getElementById("<%=TextBox1.ClientID%>");
        if (txt.value.toLower() != "james"){
           isValid = false;
        }        
        return isValid;
    }

    Se il validateStuff funzione restituisce true, un postback si verificano e si può gestire il vostro salvataggio/logica di aggiornamento nell’evento click del pulsante:

    protected void Button1_Click(object sender, EventArgs e)
    {
        //save some stuff to the database
    
        string txtValue = TextBox1.Text.Trim();
    }

    In JavaScript:

    redirectToAnotherPage = function(){
        __doPostBack("<%=SomeServerControl.ClientID%>", "someArgument");
    }

    Nel code-behind:

    protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
    {
        //call the RaisePostBack event 
        base.RaisePostBackEvent(source, eventArgument);
    
        Response.Redirect("anotherpage.aspx");
    }

    Se tutto quello che stai cercando di fare è portare l’utente a un’altra pagina, si può anche fare questo:

    redirectToAnotherPage = function(){
        window.location.href = "somepage.aspx";
    }
    • una nota a margine – __doPostBack non è una funzione JS. Esso è generato automaticamente quando si aggiunge un LinkButton per la forma. Ciò che in realtà __doPostBack non si pone alcuni dati nascosti campi e invia il modulo. così, in generale, il tuo post non risponde OP domanda.
    • Si sono corretti. La maggior parte di tutti ASP.NET controlli (tranne che per i Pulsanti e ImageButtons) utilizzare __doPostBack per eseguire il postback, ed è stato accettato e tecnica affidabile. Se si guarda OPs questione, sembra che stanno cercando di innescare un Response.Redirect dal lato client, e __doPostBack è un modo perfettamente accettabile per raggiungere questo obiettivo.
    • OP non è cercando di Response.Redirect, credo di sì… e __doPostBack a differenza di Submit() non è un costruito in funzione JS. Come ho detto __doPostBack utilizza Submit() dopo la scrittura di dati per i campi nascosti
    • M: Vedere la mia cura rispondere.
    • OH. OK, Grazie amico!
    • Dipende da cosa hai bisogno per la convalida. È solo una semplice convalida? Puoi rivedere la tua domanda di includere i dettagli di ciò che è necessario per convalidare? È possibile utilizzare jQuery per eseguire una chiamata AJAX ad un’altra pagina, che è possibile utilizzare per eseguire la logica di business di convalida e di restituire lo stato di convalida. Un’altra alternativa è fare il tuo validazione lato server, che richiedono un postback completo o un richiamata asincrona utilizzando AJAX.
    • Così. si sta lavorando. ma, come se avessi bisogno di prendere un textbox info per la mia funzione C#. sarà il java sciprt in grado di controllare? non ho fatto nella mia vita prima. mi potete dare mano mate?
    • Se la convalida JavaScript la funzione restituisce true, il modulo di postback e avrete accesso alla casella di testo valore nel lato server evento click del pulsante.
    • Ma.. non capisco il mio qustion. voglio java script controlla se qualcosa è woritedd in textboes.. come se textboxa = “Giacomo” e textbox2 = “Johnson”. se funziona, mi restituisce true, non mi rutrun false.
    • Vedere a cura di risposta. Ho incluso un esempio di come convalidare una casella di testo in funzione JavaScript.
    • Spiacenti, non il suo lavoro. non importa quello che ho nel mio TextBox1 il suo ritorno al vero..
    • M: Seguire il mio esempio. Ho creato un isValid variabile booleana che viene utilizzato in tutto il processo di validazione e restituito alla fine della funzione.
    • Ho copiato la funzione e il mio html : <div> <asp:Button ID=”Button1″ runat=”server” OnClientClick=”return validateStuff();” OnClick=”Button1_Click” /> <br /> <br /> <asp:TextBox ID=”TextBox1″ runat=”server” Height=”25 pixel” Width=”135px”></asp:TextBox> , quando ho cliked sul pulsante, non importa che cosa il testo è in textbox1, il suo ritorno vero
    • Che cosa avete nella vostra validateStuff() funzione? Che è la parte più importante.
    • <script type=”text/javascript”> validateStuff = function () { var isValid = true; var txt = document.getElementById(“<%=TextBox1.ClientID%>”) if (txt) { if (txt.valore.toLower() != “james”) { isValid = false; } } //esegue la convalida e restituire true/false ritorno isValid; } </script>
    • Sembra non trovare la casella di testo. Dopo il document.getElementById riga, mettere un avviso: alert(txt); se mostra come indefinito, poi c’è il tuo problema.
    • Il suo, dice, Objet HtmlInput Elemento
    • Si prega di modificare la tua domanda e includere il codice che stai utilizzando.
    • Fatto. Grazie di nuovo.
    • Quando si fa riferimento alla TextBox in funzione JavaScript, è necessario utilizzare il ClientID: document.getElementById("<%=TextBox1.ClientID%>");
    • Ho anche rimosso uno dei if dichiarazioni. Utilizzare il codice nella mia cura rispondere.
    • Ancora niente. non importa quello che è il testo. nulla happnd, e ho usato il nuovo codice e tutto…,

  2. 5

    In ordine per codice lato client per chiamare il codice lato server, probabilmente avete bisogno di utilizzare AJAX. Quando hai detto jQuery, è un molto utile la funzione di per fare quella telefonata. Ma a fare la chiamata da JavaScript è solo metà della storia, avrete anche bisogno di qualcosa sul server in ascolto per quella chiamata. Se avete intenzione di utilizzare jQuery (rispetto ad altre opzioni, come la AJAX Toolkit) quindi vi consiglio di non avere il metodo di essere “a la page”, ma piuttosto essere propria risorsa. Mi consiglia di utilizzare un HttpHandler per rispondere alle chiamate AJAX.

    La cosa fondamentale da ricordare qui è come è strutturalmente diverso dal semplice invio di tornare alla pagina. L’utilizzo di AJAX, queste chiamate accadere in modo asincrono all’interno della pagina. Quindi la prima cosa che si deve sapere è che Response.Redirect() non funziona in questo caso. Sarà reindirizzare la chiamata AJAX, non la pagina attualmente aperta. Ci possono essere modi per utilizzare il servizio di post-back metodologie all’interno di ASP.NET per ovviare a questo, ma mi chiedo… se tutto quello che stai facendo è il reindirizzamento, allora perché non farlo lato client? JavaScript è molto capace per questo. È possibile reindirizzare il server su un post-back abbastanza facilmente, ma dall’interno di JavaScript perché non basta avere il JavaScript farlo?

    • La Funzione è stata solo ot expline quello che sto per fare, ho voglia di chiamare una funzione che registra peploe di SQL, dopo il js controllerà thay ha scritto everytig bene.. se si dispone di un modo per farmi vedere come fare è semplice.. mi piace che, grazie..
    • Suona come avete bisogno di eseguire alcuni convalida in JavaScript prima di inviare un modulo. Fa il clic su un Pulsante? Se è così, utilizzare OnClientClick per la convalida, e restituisce true se la convalida ha esito positivo. Tornando vera causa un postback, e si può gestire la logica lato server nell’evento click del pulsante.
    • Mi può mostrare un exmple?Plesae.
    • M: se il processo di registrazione accadere in modo asincrono, o solo la convalida dell’input? (Tenete a mente che l’input deve essere convalidato in più luoghi. Validare la pagina con JavaScript per un’esperienza utente uniforme. La convalida sul sito web del codice di back-end per l’effettiva validazione dell’input, dato che qualsiasi client-side possono essere cambiati. E la convalida dei dati il codice di accesso ai dati, database, etc.) per l’integrità dei dati.) Se la registrazione deve avvenire in modo asincrono, quindi sei sicuramente guardando una chiamata AJAX. Altrimenti, semplice JavaScript farà.
    • Ho solo bisogno di un javasciprt codice per vedere se l’utente ha fatto ciò che egli potrebbe, puted nome utente destra, password, età, ecc..ecc… quando ha dose. ho bisogno di chiamare una funzione il mio codice C#, che registrerà lui (lei anche controllare il db e tutto..)
    • M: questo è un tipo di ampie cosa da chiedere su Stack Overflow. Nello specifico, cosa deve accadere in modo asincrono? Si può fare la UI di validazione della pagina. (C’è un plugin per jQuery che funziona abbastanza bene per questo: bassistance.de/jquery-plugins/jquery-plugin-validation) Ma allora le vostre esigenze di iniziare a ottenere un po ‘ vago. L’iscrizione deve avvenire in modo asincrono? O vorresti che capita quando invio la pagina? (Quest’ultimo è molto più comune.) Non siamo in grado di scrivere l’intera cosa per voi, ma ci si può aiutare con le specifiche di dove sei bloccato.

  3. 3

    È possibile chiamare il metodo C#, rendendo webmethod. Vedere questo URL: http://www.xdevsoftware.com/blog/post/Call-WebMethod-from-Javascript-in-ASPNET.aspx
    in Javascript è chiamata pagemethod.

    Ma per esempio, io suggerirei solo di pre-compilare valore pagewho? utilizzando asp.net i tag HTML quando è stato reso da asp .net.

    Esempio (in javascript):

    GoToLink("<%= YourCodeBehindMethodReturingURLToPutHere() %>");

    Di riferimento: http://weblogs.asp.net/ahmedmoosa/archive/2010/10/06/embedded-code-and-inline-server-tags.aspx

    • Buona risposta….
  4. 2

    Un modo per chiamare un metodo C# client tramite JavaScript utilizza webmethod.

    È necessario definire un public static metodo nel codice dietro e aggiungi la [WebMethod] attributo.

    In questo esempio ho usato un WebMethod che restituisce la data e ora corrente come una stringa dal server:

    [WebForm1.aspx.cs]

    using System;
    using System.Web.Services;
    
    namespace TemplateWebMethod
    {
        public partial class WebForm1 : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
    
            }
    
            [WebMethod]
            public static string MyMethod()
            {
                return DateTime.Now.ToString();
            }
        }
    }

    Nella pagina aspx modulo è necessario aggiungere un asp:ScriptManager con EnablePageMethods=”true”:

    [WebForm1.aspx]

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="TemplateWebMethod.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <script type="text/javascript">
          //during onload we set the onclick method of our button
          //to call MyMethod from the server
          window.onload = function(){
            document.getElementById('Button1').onclick = function() {
              PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed);
            }
          }
    
          function myMethodCallBackSuccess(response) {
              //JavaScript code that will run
              //after MyMethod was run successfully on server
              //respose is the returned value of MyMethod
              alert(response);
          }
    
          function myMethodCallBackFailed(error) {
              alert(error.get_message());
          }
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
          <asp:ScriptManager runat="server" EnablePageMethods="true" />
          <asp:Button runat="server" ID="Button1" ClientIDMode="Static" Text="Call MyMethod" UseSubmitBehavior="false" />
        </form>
    </body>
    </html>

    Per Button1:

    ClientIDMode=”Static” è utilizzato in modo Button1, si ottiene lo stesso ID sul lato client e siamo in grado di cercare facilmente quando l’aggiunta del client-side onclick.

    UseSubmitBehavior=”false” è necessario in modo che premendo il pulsante non causerà un postback completo.

    In questo esempio il WebMethod MyMethod sarà chiamato da codebehind premendo Button1 in modo da impostare l’onclick comportamento per Button1 finestra.onload:

    window.onload = function(){
      document.getElementById('Button1').onclick = function() {
        PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed);
      }
    }

    Dove:

    PageMethods.MyMethod(myMethodCallBackSuccess, myMethodCallBackFailed);

    è il metodo JavaScript che chiamate codice lato server.

    Abbiamo bisogno di definire i suoi 2 metodi di callback per il successo e il fallimento.

    In caso di successo ci comparsa di un messaggio con il valore restituito dalla MyMethod:

    function myMethodCallBackSuccess(response) {
        alert(response);
    }

    Sul fallito ci comparsa di un messaggio con il messaggio di errore:

    function myMethodCallBackFailed(error) {
        alert(error.get_message());
    }
  5. 0
    <head id="Head1" runat="server">
    <script type="text/javascript">
    
        function checking() {
            var firstTwoChar = document.getElementById('TextBox1').value.substr(0, 2); //getting first two chars
            if (firstTwoChar == 'ok') { //if it starts with 'ok', submit the form to server
                document.forms['form1'].__OK.value = 1; //everything's OK, let the server know it, by writing 1 to hidden input field 
                document.forms['form1'].submit(); //submits to server
            }
            else {
                alert('thats not OK'); //form is not submited, alerting client about the error
            }
    }
    
    </script>
    <title> </title>
    </head>
    <body>
    <form id="form1" runat="server">
    <input type="hidden" name="__OK" id="__EVENTARGUMENT" value="">
    <input id="Button111" type="button" value="button" onclick="checking()" />
    <asp:TextBox  ID="TextBox1" runat="server"></asp:TextBox>
    </form>
    </body>
    </html>

    come il code-behind

    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            string ok = Request.Form["__OK"]; //getting data from hidden input
            if (ok == "1") //if it's 1 checking succeeded, thus it's ok to save data 
            insertTextBoxValueintoDBTable(TextBox1.Text); //saving data
        }
    }
    • Non ha capito nulla. scusa, puoi expline ?
    • M auguro che questo editato la risposta è più coerente…

Lascia un commento