簡體   English   中英

JavaScript中的PageMethods作為函數的返回

[英]PageMethods in javascript as return of a function

javascript:

            var Enabled = false;
            function GateWay_Enabled(GateWay_Name) {
                PageMethods.GateWay_Enabled(GateWay_Name, onRequestComplete, onError);
                return Enabled;
            }

            function onRequestComplete(result) {
                Enabled = result;
            }
            function onError(result) {
                alert('Error');

            }
            var MyVariable = GateWay_Enabled('GateWay_Name');

服務器端代碼(C#):

[WebMethod]
[ScriptMethod]
public static bool GateWay_Enabled(string GateWay_Name)
{
    bool Enabled = true;
    return Enabled;
}

為什么MyVariable始終為假?
還有另一種寫PageMethods.GateWay_Enabled(GateWay_Name, onRequestComplete, onError); 作為GateWay_Enabled函數的返回? 我正在尋找這樣的東西:

var MyBoolVariable =
bool.parse(PageMethods.GateWay_Enabled(GateWay_Name,
onRequestComplete, onError));

編輯1:
一切正常,PageMethods沒有錯誤。
腳本管理器中的EnablePageMethods為true。

編輯2:
我無法將MyVariable放在onRequestComplete()函數中。
我使MyVariable可以簡化我的代碼。
MyVariable的真實代碼是:

    GateWays = [
                        { "Cod": 1, "Enabled": GateWay_Enabled('1') },
                        { "Cod": 2, "Enabled": GateWay_Enabled('2') },
                        { "Cod": 3, "Enabled": GateWay_Enabled('3') },
                        { "Cod": 4, "Enabled": GateWay_Enabled('4') },
                        { "Cod": 5, "Enabled": GateWay_Enabled('5') },
                        { "Cod": 6, "Enabled": GateWay_Enabled('6') },
                        { "Cod": 7, "Enabled": GateWay_Enabled('7') }
                ];

我想在另一個地方使用此數組。
我不能將其放在onRequestComplete()函數中。
我該怎么辦?

您需要重構代碼。 現在,您正在使用GateWay_Enabled方法執行結果之后。 將這些東西放在單獨的方法中,然后從onRequestComplete方法中調用它;

var Enabled = false;
function GateWay_Enabled(GateWay_Name) {
    PageMethods.GateWay_Enabled(GateWay_Name, onRequestComplete, onError);
}

function onRequestComplete(result) {
    alert(result); // you will get results here; 
    Enabled = result;
    //do something with value 
}
function onError(result) {
    alert('Error');
}

GateWay_Enabled('GateWay_Name');  // you can't get direct output from this method,  
// have to get results from success callback method or onError callback method 

調用PageMethods是異步的:在調用onRequestComplete函數之前,將執行return Enabledreturn Enabled

嘗試將任何讀取MyVariable代碼放入onRequestComplete函數中,而使用result代替。

在您進行Edit2和評論后,我建議您:

  1. 在給定輸入ID數組的情況下,重構PageMethod以返回整個GateWays數組,以避免進行7個AJAX調用。
  2. 當用戶單擊鏈接時,使所有這些AJAX都被調用,然后將后續代碼放入onRequestComplete方法中。

另外,如果這些數據在用戶點擊之間沒有變化,建議您在服務器端獲取。

沒有簡單的方法來確保用戶單擊代碼一直等到所有七個呼叫都完成之后。

您是否在ScriptManager中添加了EnablePageMethods =“ true”?

您正在執行onRequestComplete之前檢查MyVariable的值

退貨清單<object>從 C# 方法到 JavaScript PageMethods<div id="text_translate"><p> 我在 ASP.net ASPX 網頁上的 JavaScript 中從 PageMethods 調用返回對象列表時遇到問題。</p><p> 在 C# 方法中,如果我返回單個 object 它可以被 JavaScript 讀取,但是如果我返回一個對象列表,它會返回 500 錯誤。</p><p> 下面是一個返回單個 object 的示例,它可以工作。</p><p> C#</p><pre> [WebMethod] public static Project SingleObject() { Project obj = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); return obj; }</pre><p> JavaScript</p><pre> function getObject() { var object = PageMethods.GetData(onSuccess, onFailed); function onSuccess(data) { console.log(data.thing1); } function onFailed(result) { console.log("Request Failed;"); } }</pre><p> 現在,如果我更改 C# 方法以返回List&lt;Project&gt;而不是單個 object,它會在 chrome web 控制台中返回錯誤 500。</p><p> 下面的例子。</p><p> C#</p><pre> [WebMethod] public static List&lt;Project&gt; MulitpleObjects() { Project obj1 = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); Project obj2 = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); Project obj3 = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); List&lt;Project&gt; objects = new List&lt;Project&gt;() { obj1, obj2, obj3 }; return objects; }</pre><p> JavaScript</p><pre> function getObjects() { var objects = PageMethods.GetData(onSuccess, onFailed); function onSuccess(data) { console.log(data[0].thing1); } function onFailed(result) { console.log("Request Failed;"); } }</pre><p> 如何更改它以能夠返回對象列表?</p></div></object>

[英]Return List<Object> from C# Method to JavaScript PageMethods

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 從Java中的PageMethods成功函數返回結果 將Java PageMethods“返回值”存儲到變量中 退貨清單<object>從 C# 方法到 JavaScript PageMethods<div id="text_translate"><p> 我在 ASP.net ASPX 網頁上的 JavaScript 中從 PageMethods 調用返回對象列表時遇到問題。</p><p> 在 C# 方法中,如果我返回單個 object 它可以被 JavaScript 讀取,但是如果我返回一個對象列表,它會返回 500 錯誤。</p><p> 下面是一個返回單個 object 的示例,它可以工作。</p><p> C#</p><pre> [WebMethod] public static Project SingleObject() { Project obj = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); return obj; }</pre><p> JavaScript</p><pre> function getObject() { var object = PageMethods.GetData(onSuccess, onFailed); function onSuccess(data) { console.log(data.thing1); } function onFailed(result) { console.log("Request Failed;"); } }</pre><p> 現在,如果我更改 C# 方法以返回List&lt;Project&gt;而不是單個 object,它會在 chrome web 控制台中返回錯誤 500。</p><p> 下面的例子。</p><p> C#</p><pre> [WebMethod] public static List&lt;Project&gt; MulitpleObjects() { Project obj1 = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); Project obj2 = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); Project obj3 = new Project("Thing 1", 10, 10, "Thing 2", new List&lt;string&gt;() { "Thing 3", "Thing 4" }, "thing 5", new List&lt;string&gt;() { "Thing 6", "Thing 7" }, "Thing 8", new List&lt;string&gt;() { "Thing 9", "Thing 10" }); List&lt;Project&gt; objects = new List&lt;Project&gt;() { obj1, obj2, obj3 }; return objects; }</pre><p> JavaScript</p><pre> function getObjects() { var objects = PageMethods.GetData(onSuccess, onFailed); function onSuccess(data) { console.log(data[0].thing1); } function onFailed(result) { console.log("Request Failed;"); } }</pre><p> 如何更改它以能夠返回對象列表?</p></div></object> 使用PageMethods從Javascript代碼調用C#布爾函數 PageMethods可以返回XML嗎? PAGEMETHODS 不適用於 JS 函數 使用 PageMethods 時不調用 function 從代碼隱藏和代碼隱藏中的腳本調用函數內部調用JavaScript(PageMethods是unfind) 在不使用腳本管理器或頁面方法的情況下,從asp.net 2.0中的javascript調用服務器端函數 PageMethods.Method 未從 javascript 調用
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM