簡體   English   中英

我們可以使用 C# 和 Z9E0DA8438E1E38A1Cweb 方法在 static 中調用 Page_Load 事件嗎?

[英]Can we call Page_Load event in static web method using C# and ASP.NET

我已經用谷歌搜索了這個問題,但沒有得到相關答案,所以我想知道,當 web 方法觸發時,是否可以調用page_load事件?

[WebMethod]
public static string AutoFillData(string entredsmbl)
{
    // List<string> data = new List<string>();

    try
    {
        // Once this event hit and I want to call the page_load event
        // Page_Load(null, null);

        entredsymbol = entredsmbl;

        return entredsymbol;
    }
    catch (Exception)
    {
        throw;
    }
}

為什么我要調用page_load事件?

因為,不是從 static WebMethod獲取返回的數據,而是在 Ajax 中編寫一些邏輯並將該數據加載到我想要的位置(為了避免這個過程,我想調用page_load事件)。

我不認為這是一個好問題,但我想知道這是否可能。

給我你最好的建議

好吧,假設您編造了某種方式來調用該代碼?

你不能!!1

原因是如果沒有回發,那么控件的所有值都不可用。

web 方法是 static,您甚至不必將 web 方法放在同一頁面上。,您所做的只是調用服務器端代碼塊但是,如果沒有回發,那么所有控件及其值仍然是桌面瀏覽器上的設置 - 而不是服務器端,所以。 即使您可以在沒有回發的情況下調用頁面加載,它也無法更改頁面上任何內容的值——因為頁面仍在用戶桌面上設置——而不是在服務器上。

請記住,在您進行回發之前,后面的代碼及其值是不存在的。

You can (even should) think of your web page code behind like calling a function or sub, and once you exit that function, then all values and varialbes have go out of scope.

web 服務器不會在 memory 的頁面 class 后面保留代碼的活動副本。 web 服務器正在等待您或任何其他用戶回發。

當您回發時,然后僅是您在 memory 中創建的頁面 class 的實例。 然后運行您的代碼,呈現頁面,發送回客戶端,然后處理頁面 - 從 memory 中刪除。 Web 服務器現在正在等待下一次回發。

所以,你有這個:

在此處輸入圖像描述

請注意您的頁面 class - 后面的代碼不在服務器上的 memory 中。

你沒有這個:

注意這里非常小心 - web 頁面在客戶端計算機上 - 它在 web 服務器端根本不存在。

在此處輸入圖像描述

你甚至沒有這個:

在此處輸入圖像描述

因此,當您單擊按鈕或進行回發時,您會得到以下信息:

在此處輸入圖像描述

我們的 web 頁面被發送到服務器。 你現在有這個:

在此處輸入圖像描述

所以現在您的頁面位於服務器上。

現在創建了頁面 class 的實例,您的代碼開始運行。

您后面的代碼可以修改控件(甚至控件是否可見),但頁面不與用戶交互 - 只有代碼可以修改 web 頁面。 因此,web 頁面可能會發生一個更改或許多更改,但是當您更新文本框等內容時,用戶還沒有看到這些更改。 所以,你不能說運行一個循環到 flash 一個文本框打開和關閉 - 因為更改發生在服務器上 - 客戶端瀏覽器不再有 web 頁面!

然后將其發送回客戶端,服務器端 class 實例和代碼被丟棄 - 不存在,.! 您的服務器端頁面 class 已被處理 - 從內存中刪除,並且后面的 web 頁面代碼不再存在。

因此,頁面返回客戶端,重新顯示,加載 JavaScript,然后 JavaScript 開始運行。

在此處輸入圖像描述

好的,那么,考慮到上述情況?

然后你的問題:

在我想要的地方加載數據

您無法加載或更改 web 頁面或對其執行任何操作,因為整個 web 頁面仍位於客戶端瀏覽器端 - 它不存在於服務器上。 您無法觸摸控件或更改 web 頁面 - 它在服務器端不存在。 web 頁面位於客戶端。

因此,如上所示,它表明您不了解 web 頁面的工作原理。 您不能在 web 頁面上調用任何非 static 方法,因為您在服務器上沒有 web 頁面,是嗎?

如果您只需要更新一些控件? 然后放入您想要更改的那些控件 + 更新面板內的按鈕。 然后將僅回發更新面板內部的內容,運行代碼隱藏,然后更新面板返回到客戶端,並且只有 web 頁面的那部分會更新。

請記住,在使用更新面板時,頁面加載事件會運行,但讓頁面加載做很多事情沒有意義,因為同樣只能更改更新面板中的控件。 但是,頁面加載每次都會觸發。

考慮到上述情況,您就可以知道您的問題如何以及為什么沒有意義。 簡單的答案是控件和值仍然位於客戶端計算機瀏覽器上 - 如果沒有將頁面發布回服務器,則服務器無法更新您的瀏覽器。

服務器無法再訪問您計算機上的 web 頁面,然后它試圖訪問您計算機上的一些 web 頁面進行銀行業務!!!!

如果 web 服務器可以訪問您擁有的任何瀏覽器頁面 - 並控制該 web 頁面,那么 web 使用風險太高!!!

因此,服務器永遠不會修改您桌面上的任何內容,.,您發送您想要更改的內容。 然后后面的代碼現在可以在服務器上修改該頁面。 當后面的代碼完成后,頁面將被發送回客戶端進行顯示。

我認為更新面板可能很適合您的情況 - 但您需要掌握 web 的工作原理。

暫無
暫無

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM