2010-01-20 47 views
2

我只是想知道,是否有使用jquery(「.ajax」)創建Ajax請求並在不使用.NET Ajax框架(無腳本管理器)的情況下進行部分渲染。使用jQuery製作.NET Ajax請求

我已經嘗試過此操作,但它每次都執行page_load而未達到pagemethod。

function doAsync() 
{ 
    jQuery.ajax({ 
    type: "POST", 
    url: "/WebForm1.aspx/testMethod", 
    error: function (xhr, status, error) { alert(status); }, 
    success: function (response) { alert('suc'); } 
    )}; 
} 

[WebMethod] 
public static void testMethod() 
{ 
    //server side code 
} 

這裏有什麼不對嗎?

謝謝!

+0

你是問,如果你可以做一個Ajax請求asp.net並返回一些像HTML或數據?如果是的話,你可以通過asp.net webforms或asp.net mvc使用什麼? – chobo2

+0

是的,正確的,我正在使用webform。 我試圖通過使用$ .ajax實現這一點,但我得到整個頁面刷新,並得到一些錯誤。 – Thurein

+0

我不認爲你可以在asp.net webform中粘貼webMethod(如果你需要做一些修改)。正如我在之前的文章中所提到的,所有Web表單頁面都有一個頁面生命週期。它總是通過page_load,你無法阻止它。你可以有一個if語句來停止代碼運行,但你不能阻止它。 YOu不能在你的代碼中只使用一種方法,然後進入它。你必須瀏覽整個頁面生命週期。如果你想這樣做,web服務的方式然後做一個單獨的web服務項目。 – chobo2

回答

-7

那麼webforms是如何設置的,你實際上無法獲得文件後面的代碼,因爲這需要你瀏覽整個頁面生命週期。你不能只在你的代碼背後有一些方法,並試着將它定位。

所以你需要做一個Web服務或者我喜歡做的就是使用一個通用的處理程序。

所以,你會去添加 - 添加新項 - 通用處理器(ashx的)

它會產生這樣的文件(後續的代碼有沒有被默認生成它的一些更多的東西)。

<%@ WebHandler Language="C#" Class="FileNameOfGenricHandler" %> 

using System; 
using System.Web; 

public class FileNameOfGenricHandler: IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 

     // use context.Request to get your parameter fields that you send through ajax. 
     int ID =Convert.ToInt32(context.Request["sendID"]); 

     // do something with the variable you sent. 

     // return it as a string - respone is just a string of anything could be "hi" 
     context.Response.ContentType = "text/plain"; 
     context.Response.Write(response); 

    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 

} 

jQuery的側面與通用處理器

// Post to the path like this ../FolderName/FolderName/FileName.ashx(or whatever you stuck your generic handler file). 
    $.post('../FolderName/FileNameOfGenricHandler.ashx', { sendID: id }, function(response) 
       { 
        alert(response) 
}); 

一個缺點,雖然是你想,你需要自己的通用處理器的每個不同的Ajax請求。所以如果你想創建一個用戶,刪除一個用戶並通過ajax更新一個用戶,你將不得不擁有3個通用處理程序。

這是我用過的一個類似的教程。

http://sites.google.com/site/spyderhoodcommunity/tech-stuff/usingjqueryinaspnetappswithhttphandlersashx

+0

這是正確的,我們不能只是達到一個方法,它會經歷整個頁面循環。 – Thurein

+0

因此,爲什麼我使用通用處理程序。它不同於.aspx頁面,它沒有生命週期。在我使用它的情況下。這是文件中的一種方法。這樣你就可以做到你需要的東西。如果你不喜歡製作很多通用文件的想法。在您的項目中製作Web服務應用程序。在此Web服務應用程序中創建所有方法,並對此Web服務及其方法執行所有的Ajax請求。 – chobo2

+3

這是不正確的。儘管其代碼駐留在給定ASPX頁面的代碼隱藏文件中,但當您調用ASP.NET AJAX「頁面方法」時,頁面生命週期不會執行。對於所有意圖和目的,頁面方法都是ASMX ScriptServices的縮寫。 –

4

Consuming Web Services through jQuery Ajax methods

Consuming Methods residing on an Aspx Page through jQuery Ajax Methods

其實上面的文章都是教給我的jQuery Ajax的真正的人。如果這是你第一次,不要擔心!他們很容易理解。

的jQuery的Ajax方法:

  • ajax():專門爲崗位方法
  • get():爲每一個Ajax調用
  • post()低級AJAX方法專門用於get方法
  • getJSON() :專業獲得json類型結果集
  • load():將html部分注入頁面上的html元素。
0

您可以使用page methods來做到這一點。基本上,您創建一個靜態方法並添加WebMethod屬性,並將其用作Web服務方法。

2

是的,你可以。

您可以使用$.ajax$.get$.post向服務器發出請求。

並且在回調函數中可以獲得多種格式的數據; XML,純文本,HTML或JSON。

$.ajax ({ 
    type : "GET", 
    url  : "MyPage.aspx", 
    data : "action=Action&name=Test", 
    success : function (msg) { 
     ParseSuccess (msg); 
     }, 
    error : function (msg) { 
     ParseError (msg); 
     } 
    }); 
15

什麼你缺少的是內容類型。爲了使一個頁面方法的請求,你必須撥打電話完全一樣:

$.ajax({ 
    type: "POST", 
    url: "/WebForm1.aspx/testMethod", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Do something interesting here. 
    } 
}); 

見本作更詳細的信息:http://encosia.com/2008/05/29/using-jquery-to-directly-call-aspnet-ajax-page-methods/

+0

我已經添加了內容類型,但它仍然執行page_load方法,並未到達我的aspx代碼中的web方法。 – Thurein

+3

確保您已正確配置ASP.NET AJAX的web.config。您絕對可以通過這種方式調用頁面方法,而無需在整個生命週期中運行頁面。 –

+0

現在我認爲,我們明白了,因爲我的網站不支持ajax,這也是我試圖使用jQuery Ajax調用的原因,任何建議。 謝謝 – Thurein