[英]Call WebMethod in C# codebehind without using a server form in ASPX page
[英]ASPX Codebehind call Page Client script from WebMethod
我有一個ASPX頁面,該頁面通過javascript函數內部的AJAX調用來調用服務器。 我需要處理通過其發送到服務器的(json)數據,然后將數據從服務器返回給客戶端,並使用參數調用函數。
我的ajax代碼
function () {
var myVar= "ooooblah";
$.ajax({
type: "POST",
url: "MyPage.aspx/TestFunc",
data: "{val:'" + myVar + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess
});
}
我在aspx.cs后面的代碼
[WebMethod]
public static void TestFunc(string val)
{
//process code here
Page.ClientScript.RegisterStartupScript(...); //tried using this but it don't work
}
我嘗試編譯時遇到的錯誤是:
錯誤CS0120非靜態字段,方法或屬性“ Control.Page”需要對象引用
錯誤CS0026關鍵字'this'在靜態屬性,靜態方法或靜態字段初始化程序中無效
是否需要將其放在Page_Load中? 不確定如何解決此問題
您將無法從C#調用javascript函數,因為這是“無狀態”(可以說)POST調用,並且該調用在頁面上下文之外運行。 該方法可以在任何其他類中,並且結果將相同, 您將無法訪問Controls數組或Page屬性,這就是該方法為static的原因 。
您可以做的是向OnSuccess函數添加一個更復雜的響應作為提示。 因此OnSuccess函數可以檢查:“嘿,如果我在響應中獲得ExtraArgsForMagicFunction屬性,則意味着我需要調用我的魔術函數”
在客戶端上
<script type="text/javascript">
var myVar= "ooooblah";
$.ajax({
type: "POST",
url: "WebMethodTest.aspx/TestFunc",
data: "{val:'" + myVar + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: onSuccess
});
function onSuccess(data) {
alert(data.d.MainResponse);
if (data.d.ExtraArgsForMagicFunction) {
magicFunction(data.d.ExtraArgsForMagicFunction)
}
}
function magicFunction(args) {
alert(args[0]);
}
</script>
在服務器上
[Serializable]
public struct FuncResult
{
public string MainResponse;
public string[] ExtraArgsForMagicFunction;
}
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static FuncResult TestFunc(string val)
{
return new FuncResult()
{
MainResponse = val + "Response",
ExtraArgsForMagicFunction = new[] { "Some Extra Args" }
};
}
如果您收到401,請使用jQuery AJAX“ 401(未經授權)”檢查ASP.NET調用WebMethod。
如果你想知道“為什么d
?” 檢查一下{“ d”:“”}在asp.net Web服務響應中是什么意思
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.