it-swarm.com.de

Wie kann ich Code hinter der Servermethode von einer clientseitigen JavaScript-Funktion aus aufrufen?

Ich habe eine JavaScript-Funktion für ein HTML-Klickereignis in ASPX-Seite. Und eine Server-Methode in ihrem Code hinter der Seite. Nun möchte ich die Servermethode aus der JavaScript-Funktion nur mit einigen Parametern aufrufen, wenn der Benutzer auf die Schaltfläche "HTML" klickt. 

Bitte ändern Sie dieses Szenario nicht und verwenden Sie keine asp.net-Kontakte auf der aspx-Seite, während Sie antworten. Weil nur HTML-Steuerelemente zulässig sind. Kann mir da jemand weiterhelfen? Danke im Voraus. Warten auf Antworten.

Hier ist der Code,

Code im Markup:

<script language="javascript" type="text/javascript">
    function btnAccept_onclick() {        
        var name;            
        name = document.getElementById('txtName').value;

        // Call Server side method SetName() by passing this parameter 'name'
</script>

<input type="button" id="btnAccept" value="Accept" onclick="return btnAccept_onclick()" />

Code-Behind:

public void SetName(string name)
{
    // Code for some functionality    
}

Ja, Sie können eine Webmethode wie ..

[WebMethod]
public static String SetName(string name)
{
    return "Your String"
}

Und dann nennen Sie es in JavaScript wie

PageMethods.SetName(parameterValueIfAny, onSuccessMethod,onFailMethod);

Dies ist auch erforderlich:

<asp:ScriptManager ID="ScriptMgr" runat="server" EnablePageMethods="true"></asp:ScriptManager>
38
Muhammad Akhtar

In meinen Projekten rufen wir serverseitige Methoden normalerweise wie folgt auf:

in JavaScript:

document.getElementById("UploadButton").click();

Serverseitige Steuerung:

<asp:Button runat="server" ID="UploadButton" Text="" style="display:none;" OnClick="UploadButton_Click" />

C #:

protected void Upload_Click(object sender, EventArgs e)
{

}
24
user1965719

Wenn Sie nicht Ajax als verwenden möchten

Code behind 

void myBtn_Click(Object sender,EventArgs e)
{
   //SetName(name); your code
}


.aspx file

<script language="javascript" type="text/javascript">
    function btnAccept_onclick() {        
        var name;            
        name = document.getElementById('txtName').value;
        document.getElementById('callserver').click();
        // Call Server side method SetName() by passing this parameter 'name'
</script>


<div style="dispaly:none;">
  <input type="button" id="callserver" value="Accept" click="myBtn_Click" runat="server" />
</div>
<input type="button" id="btnAccept" value="Accept" onclick="return btnAccept_onclick()" />

oder verwenden Sie die Seitenmethode

.cs file
[ScriptMethod, WebMethod]

   public static string docall()
   {
      return "Hello";
   }

.aspx file

<script type="text/javascript">
      function btnAccept_onclic() {
          PageMethods.docall(onSuccess, onFailure);
      }

  function onSuccess(result) {
          alert(result);
      }


      function onFailure(error) {
          alert(error);
      } 

</script>

Überprüfen Sie dies: http://blogs.Microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

6
Pranay Rana

Ich musste meine buttonid als Postbacktrigger registrieren ...

RegisterPostbackTrigger(idOfButton)
1
rainhider

Ajax ist der Weg zu gehen. Der einfachste (und wahrscheinlich der beste) Ansatz ist jQuery ajax ()

Am Ende schreiben Sie so etwas:

$.ajax({
  url: "test.html",
  context: document.body,
  success: function(){
    // do something when done
  }
});
1
Bazzz
// include jquery.js
//javascript function
var a1="aaa";
var b1="bbb";
                         **pagename/methodname**     *parameters*
CallServerFunction("Default.aspx/FunPubGetTasks", "{a:'" + a1+ "',b:'" + b1+ "'}",
            function(result)
            {

            }
);
function CallServerFunction(StrPriUrl,ObjPriData,CallBackFunction)
 {

    $.ajax({
        type: "post",
        url: StrPriUrl,
        contentType: "application/json; charset=utf-8",
        data: ObjPriData,
        dataType: "json",
        success: function(result) 
        {
            if(CallBackFunction!=null && typeof CallBackFunction !='undefined')
            {
                CallBackFunction(result);
            }

        },
        error: function(result) 
        {
            alert('error occured');
            alert(result.responseText);
            window.location.href="FrmError.aspx?Exception="+result.responseText;
        },
        async: true
    });
 }

//page name is Default.aspx & FunPubGetTasks method
///your code behind function
     [System.Web.Services.WebMethod()]
        public static object FunPubGetTasks(string a, string b)
        {
            //return Ienumerable or array   
        }
1
Sai Sherlekar

JS-Code:

<script type="text/javascript">
         function ShowCurrentTime(name) {
         PageMethods.GetCurrentTime(name, OnSuccess);
         }
         function OnSuccess(response, userContext, methodName) {
          alert(response);
         }
</script>

HTML Quelltext:

<asp:ImageButton ID="IMGBTN001" runat="server" ImageUrl="Images/ico/labaniat.png"
class="img-responsive em-img-lazy" OnClientClick="ShowCurrentTime('01')" />

Code hinter C #

[System.Web.Services.WebMethod]
public static string GetCurrentTime(string name)
{
    return "Hello " + name + Environment.NewLine + "The Current Time is: "
            + DateTime.Now.ToString();
}
1
mohammad

Meiner Meinung nach ist die von user1965719 vorgeschlagene Lösung sehr elegant. In meinem Projekt werden alle Objekte, die in das enthaltende div aufgenommen werden, dynamisch erstellt. Das Hinzufügen der zusätzlichen versteckten Schaltfläche ist somit ein Kinderspiel:

aSPX-Code:

    <asp:Button runat="server" id="btnResponse1" Text="" 
    style="display: none; width:100%; height:100%"
    OnClick="btnResponses_Clicked" />

    <div class="circlebuttontext" id="calendarButtonText">Calendar</div>
</div>    

C # -Code hinter:

protected void btnResponses_Clicked(object sender, EventArgs e)
{
    if(sender == btnResponse1)
    {
        //Your code behind logic for that button goes here
    }
}
0
Per Malmstedt

Erstellen Sie einen neuen Dienst und rufen Sie ihn an. Die Bearbeitung kann dort erfolgen und zurückgegeben werden.

http://code.msdn.Microsoft.com/windowsazure/WCF-Azure-AJAX-Calculator-4cf3099d

function makeCall(operation){
    var n1 = document.getElementById("num1").value;
    var n2 = document.getElementById("num2").value;
if(n1 && n2){

        // Instantiate a service proxy
        var proxy = new Service();

        // Call correct operation on vf cproxy       
        switch(operation){

            case "gridOne":
                proxy.Calculate(AjaxService.Operation.getWeather, n1, n2,
 onSuccess, onFail, null);

****HTML CODE****
<p>Major City: <input type="text" id="num1" onclick="return num1_onclick()"
/></p>
<p>Country: <input type="text" id="num2" onclick="return num2_onclick()"
/></p> 
<input id="btnDivide" type="button" onclick="return makeCall('gridOne');" 
0
Tequila