DCSIMG
הפעלת מתודות סטטיות באמצעות ScriptManager - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

הפעלת מתודות סטטיות באמצעות ScriptManager

כדי להפעיל מתודות בצד השרת באמצעות ה ScriptManager,
אפשר לכתוב WebService, או להפעיל מתודה סטטית בדף.
 
התהליך הוא מאוד פשוט:
 
1. הגדרה של מתודה סטטית בעמוד: 
 

[WebMethod]

public static string Hello(string name)

{

    return "Hello " + name;

}

 
 
2. להוסיף ScriptManager לעמוד ולהוסיף לו EnablePageMethods
 

<asp:ScriptManager ID="ScriptManager1"

    runat="server" EnablePageMethods="true">

</asp:ScriptManager>

 
 
 3. להוסיף פונקציה ב JS שתפעיל את המתודה בצד השרת 
 

<script type="text/javascript">

    function CallServer() {

        PageMethods.Hello("shlomo", onSucsses, onFail);

    }

 

    function onSucsses(resalt) {

        alert(resalt);

    }

 

    function onFail(err) {

        alert(err);

    }

</script>

 
 
קל ופשוט. 
 
ותודה לפיני הגאון שעזר לי לכתוב את הפוסט
 
עריכה:
לבקשת שחר אני מצרך את הדוגמא להורדה.

תוכן התגובה

shachar כתב/ה:

שלום.

השתמשתי בדוגמא שלך, ואנ מקבל שגיאה ש:

PageMethods is undefined

# May 5, 2009 8:58 AM

Shlomo כתב/ה:

ההנחה שלי ששכחת לעשות EnablePageMethods="true"

בכל מקרה אני מצרף את הדוגמא להורדה,

(הלינק נמצא בסוף הפוסט)

# May 5, 2009 9:20 AM

שלמה גולדברג כתב/ה:

בפוסט הקודם הדגמתי איך להפעיל מתודות סטטיות באמצעות ScriptManager אבל מה יקרה במצב שהדף שלנו הוא דף הלוגין

# May 5, 2009 2:52 PM

תקוה כתב/ה:

ניסיתי, ואני לא "נכנסת" לפונקציית צד שרת. מצרפת קטע קוד, תנסה בבקשה לזהות למה לא עובד:

CODEBEHIND

using System.Web.Services;

using System.Web.Script.Services;

.

.

[WebMethod]

   public static void updateComment(string remarker, string commentToAdd, int logId)

   {

       string addition = remarker +"( "+ DateTime.UtcNow.AddHours(2).ToString() +"):  " + commentToAdd;

       Log.updateComment(logId, addition);

   }

בדף:

<head runat="server">

   <title>הערות אחרי שיחה טלפונית</title>

   <script type="text/javascript">

function updateRemark(){

//debugger

alert("entered updateRemark()");

var remarker = document.getElementById("txtName").value;

alert(remarker);

var comment = document.getElementById("txtNewRemark").value;

alert(comment);

var logId = document.getElementById("hiddenLogId").value;

alert(logId);

//var addition = remarker +":  " + comment;

//Log.updateComment(logId, addition);

PageMethods.updateComment(remarker, comment, logId, onSuccess,onFailure);

document.getElementById("updateButton").setAttribute("enabled",false);

}

var resultMessageSpan = document.getElementById("resultsMessage");

var updateButton = document.getElementById("update");

var closeButton = document.getElementById("close");

function onSuccess(result) {

       alert(result);

       resultMessageSpan.innerHTML="עדכון עבר בהצלחה";                

   }

   function onFailure(err) {

       resultMessageSpan.innerHTML="שגיאה בעדכון. נסה שנית";

       updateButton.enabled=true;

       alert(err);

   }

</script>

</head>

<body>

   <form id="form1" runat="server" dir="rtl">

    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">

   </asp:ScriptManager>

.

.

.

           <td><input type="button" id="update" value="עדכן הערה" onclick="updateRemark()" /></td>

           <td><input type="button" id="close" value="סגור" onclick="window.close()" /></td>

.

.

<input type="hidden" id="hiddenLogId" runat="server" />

   </div>

   </form>

</body>

# July 22, 2009 12:36 PM

תקוה כתב/ה:

אחרי ששברתע[י את הראש, מצאתי שהיה חסר לי הHANDLERS והMODULES ב WEB.CONFIG

אולי כדאי להוסיף את הנקודה הזו

# August 10, 2009 2:04 PM

שלמה גולדברג כתב/ה:

נניח שיש לכם custom validator שאתם רוצים בצד הקליינט לפנות ב - ajax לשרת. &lt; asp : Button ID =&quot;Button1&quot;

# April 20, 2010 8:44 PM

שלמה גולדברג (הרב דוטנט) כתב/ה:

קריאה למתודה מתוך ה - PageMethods מגיעה ל - Page_Load. כפי שכבר כתבתי כמה פעמים כמה זה קל להפעיל מתודות

# September 21, 2010 6:13 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 4 and 7 and type the answer here:


Enter the numbers above: