كيف يمكن استدعاء وظيفة جافا سكريبت من داخل الطريقة ؟

StackOverflow https://stackoverflow.com/questions/153776

  •  03-07-2019
  •  | 
  •  

سؤال

أنا داخل...

public class bgchange : IMapServerDropDownBoxAction
{
    void IServerAction.ServerAction(ToolbarItemInfo info)
    {
     Some code...

وبعد "بعض التعليمات البرمجية" أريد أن الزناد

[WebMethod]
public static void DoSome()
{

}

مما يتسبب في بعض جافا سكريبت.هل هذا ممكن ؟

حسنا, تبديل أساليب هنا.كنت قادرا على استدعاء dosome();التي أطلقت ولكن لم تؤدي إلى جافا سكريبت.لقد حاولت استخدام registerstartupscript الطريقة ولكن لا نفهم تماما كيفية تنفيذ ذلك.هنا ما حاولت:

public class bgchange : IMapServerDropDownBoxAction
{

void IServerAction.ServerAction(ToolbarItemInfo info)
{
    ...my C# code to perform on dropdown selection...
        //now I want to trigger some javascript...
        // Define the name and type of the client scripts on the page.
        String csname1 = "PopupScript";
        Type cstype = this.GetType();

        // Get a ClientScriptManager reference from the Page class.
        ClientScriptManager cs = Page.ClientScript;

        // Check to see if the startup script is already registered.
        if (!cs.IsStartupScriptRegistered(cstype, csname1))
        {
            String cstext1 = "alert('Hello World');";
            cs.RegisterStartupScript(cstype, csname1, cstext1, true);
        }
}

}

حصلت على registerstartupscript رمز من msdn سبيل المثال.ومن الواضح أنا لا تنفيذ ذلك بشكل صحيح.حاليا vs يقول "مرجع كائن مطلوب غير حقل ثابت أو أسلوب أو خاصية 'System.ويب.واجهة المستخدم.الصفحة.ClientScript.الحصول على' يشير إلى قطعة من التعليمات البرمجية "صفحة.Clientscript;" شكرا.

هل كانت مفيدة؟

المحلول

أنا لست متأكدا من أنني أفهم تماما تسلسل ما كنت تحاول أن تفعل ما هو العميل وما هو ليس....

ومع ذلك ، يمكن إضافة البدء جافا سكريبت طريقة إلى الصفحة التي من شأنها ثم اتصل WebMethod.عند استدعاء WebMethod عن طريق جافا سكريبت, يمكنك إضافة استدعاء الدالة ثم يتم استدعاؤها عند WebMethod العوائد.

إذا قمت بإضافة ScriptManager الوسم على الصفحة الخاصة بك ، يمكنك الاتصال WebMethods تعريفها في الصفحة عن طريق جافا سكريبت.

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

من Page_Load وظيفة يمكنك أن تضيف استدعاء WebMethod..

Page.ClientScript.RegisterStartupScript(
    this.GetType(), 
    "callDoSome",
    "PageMethods.DoSome(Callback_Function, null)", 
    true);

Callback_Function يمثل وظيفة جافا سكريبت التي سيتم تنفيذها بعد WebMethod يسمى...

<script language="javascript" type="text/javascript">
    function Callback_Function(result, context) {
        alert('WebMethod was called');
    }
</script>

تحرير:

وجدت هذا الرابط شبكة ADF الضوابط.هل هذا ما كنت تستخدم??

من تلك الصفحة ، يبدو أن شيئا مثل هذا رد جافا سكريبت.

public void ServerAction(ToolbarItemInfo info) {
    string jsfunction = "alert('Hello');";
    Map mapctrl = (Map)info.BuddyControls[0];
    CallbackResult cr = new CallbackResult(null, null, "javascript", jsfunction);
    mapctrl.CallbackResults.Add(cr);
}

نصائح أخرى

إذا كان ما سبق هو كيف يدعون RegisterStartupScript ، فإنه لن ينجح لأنه لم يكن لديك إشارة إلى "الصفحة" وجوه.

bgchange في المثال الخاص بك يمتد كائن (على افتراض IMapServerDropDownBoxAction هو واجهة) ، مما يعني أنه لا يوجد صفحة سبيل المثال لتتمكن من الرجوع إليها.

هذا فعلت نفس الشيء من Asp.Net الصفحة أو UserControl, عمل, لأن الصفحة ستكون مرجعية صالحة.

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Page.ClientScript.RegisterStartupScript(
            this.GetType(),
            "helloworldpopup",
            "alert('hello world');",
            true);          
    }
}

لا يمكنك استدعاء الأساليب داخل المتصفح مباشرة من الخادم.ومع ذلك ، يمكنك إضافة جافا سكريبت وظائف الاستجابة التي سيتم تنفيذ الطرق داخل المتصفح.

داخل ServerAction طريقة القيام بما يلي

string script = "<script language='javascript'>\n";
script += "javascriptFunctionHere();\n";
script += "</script>";

Page.RegisterStartupScript("ForceClientToCallServerMethod", script);

مزيد من المعلومات هنا

هممم...السؤال تغيرت بشكل كبير منذ بلدي الأصلي الإجابة.

الآن أعتقد أن الجواب هو لا.لكن قد تكون خاطئة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top