2011-01-12 131 views
0

我在我的網站上使用ajax來調用一個名爲NewsFeed.ascx的用戶控件中的一些信息,它位於文件夾'controls'中,我的方法是製作一個Web服務網頁,其中包含在我的情況被稱爲GetRSSReader函數返回一個字符串格式(稱爲的WebMethods文件夾中):使用ajax,asp.net加載頁面數據

[WebMethod] 
public string GetRSSReader() 
{ 
    Page page = new Page(); 
    UserControl ctl = 
     (UserControl)page.LoadControl("~/Controls/NewsFeed.ascx"); 

    page.Controls.Add(ctl); 

    StringWriter writer = new StringWriter(); 
    HttpContext.Current.Server.Execute(page, writer, false); 

    return writer.ToString(); 
} 

然後調用使用jQuery(我找到了這個網頁太重)得到返回的數據爲JSON像這樣:

<div id="Content"></div> 
<script type="text/javascript" defer="defer" src="../JAVA/Default.js"></script> 

>

$(document).ready(Update); 

function Requests() 
{ 
    $.ajax({ 
    type: "POST", 
    url: "../WebMethods/Feed.asmx/GetRSSReader", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     $('#Content').html(msg.d); 
    } 
    }); 
} 

的的jquery.js這個頁面(default.js)創建的文件夾中的Java


我的問題:還有什麼更好的比這個方式。除此之外,當我有大量的數據它不起作用,並且它不讀取網格視圖工具。有什麼建議麼 !? 10x


形成另一面是否有任何網絡服務的替代品! (更快)

回答

1

雖然確實有一些低級別的方法來完成你在做什麼,這將減少一些開銷,這聽起來像你的問題是一個「巨大的數據量,」一個WebService的不夠支付管理費用。

您是否正在返回新聞Feed的全部內容?你不想回復改變了嗎?一些邏輯似乎是答案...

此外,沒有真正的理由使用web服務來做到這一點。只需將UserControl放在常規頁面(aspx)中並使用GET查詢進行調用即可。您也可以使用通用Web處理程序(ashx),而不是使用開銷較低的WebService。但是,這聽起來不像這是真正的問題。無論哪種方式,你不需要打擾JSON。您正在獲取HTML,只需獲取它,然後直接使用它。而不是返回完全呈現的HTML(不知道你的UserControl做什麼,很難知道如何優化這個),只是返回數據,並使用jQuery或其他東西來產生輸出。如果您不想在jQuery中構建模板,那麼您可以在服務器上呈現默認/空模板,並在客戶端上使用它來構建數據。

這當然是一些工作,但是如果數據量是瓶頸,這將有所幫助。

0

一般來說,WCF比Web服務更新,更快,更好。

不過你的情況我很懷疑你需要或者那些..如果我理解您的需求,您可以使用UpdatePanel這個..與UpdatePanel包裹控制和客戶端腳本觸發它,而不是調用自己的AJAX請求。

UpdatePanel使用幕後自己的AJAX機制,我想這是因爲已經優化成爲可能。

+0

使用UpdatePanel的唯一問題是性能。該請求包含傳統ASP.NET回發包含的所有內容,包括視圖狀態 – Rawhi 2011-01-12 14:01:33

0

您可以使用ASP.NET Callback API,它非常輕便,您也可以發送JSON。

無論如何,爲什麼你說你的方式是不高效的?您是否通過此Web服務發送大量數據?

也許你需要分頁。

+0

我沒有說它效率不高,但它不支持GridView工具!那麼ASP.NET的回調API呢? – Rawhi 2011-01-12 14:04:36

+0

你在說什麼網格視圖?我不明白你的回撥API – 2011-01-12 14:10:09