2010-06-18 109 views
4

我不知道我想要做什麼是可能的 - 幾乎我只是想使用AJAX調用用戶控件並獲取控件的呈現html。然而,當我試圖獲取我收到以下錯誤消息的控制:ASP.NET - 使用AJAX加載用戶控件?

此類型的頁不提供早餐。

描述:類型您請求不提供服務,因爲它已被明令禁止的網頁。擴展名'.ascx'可能不正確。請查看下面的網址,並確保它拼寫正確。

請求的URL:/Controls/ClientFormControl.ascx

是否有可能使這種類型的網頁可投放的,或者是有你需要調用它以特定的方式?我知道這樣的事情在MVC框架中很容易...

在此先感謝。

+0

在這種情況下,建議使用「更新面板」的「腳本管理」特色的ASP.NET AJAX提供。您可以隱藏用戶控件,並根據需要通過AJAX調用顯示它。 – Zeal 2010-06-18 17:50:57

+0

我認爲最好的解決方案@Claudio Redi s – 2013-11-20 10:44:57

回答

3

你是不是在看問題的正確。除非它包含在WebForm中,否則無法呈現usercontrol。

正確的解決這個問題是隻包含在其上的用戶控件創建一個頁面,然後渲染/根據需要注入它。

或者您可以使用一個UpdatePanel,然後將用戶控件添加到當前頁面程序在服務器端(在類似的updatepanel_load事件)。

(其實它看起來像我的第二個解決方案不工作 - 現在檢查出來)

到這裏跟進的是一個很好的例子:http://geekswithblogs.net/rashid/archive/2007/08/11/Loading-UserControl-Dynamically-in-UpdatePanel.aspx

貌似伎倆是一個佔位符和函數,我是不知道LoadControl()。 System.Web.UI.TemplateControl.LoadControl

PlaceHolder1.Controls.Clear(); 
UserControl uc = (UserControl)LoadControl(controlPath); 
PlaceHolder1.Controls.Add(uc); 
+0

簡直不敢相信我只是把控件放在一個頁面上並調用頁面。有些吮吸,你不能只是由自己渲染控制...現在我將不得不做一堆.aspx頁面,只有控制的標籤... – 2010-06-18 18:31:38

+1

我一直在那裏做, 。花了我一段時間才第一次意識到。這種方法唯一的問題是你需要過濾出客戶端的html標籤,除非你把它放到iframe中。 此外,您可能會遇到一些事件處理方面的問題。 – 2010-06-18 18:34:13

8

由於您沒有提供任何代碼,因此不知道您是如何做的。也不知道爲什麼你會需要這樣一個奇怪的事情:-)不是很常見,可能有一種替代方法。您可以提供更多詳細信息,以便我們可以提供更好的選擇。

我說你能做到這一點,但你需要創建控件,並調用渲染編程這樣

TextWriter stringWriter = new StringWriter(); 
HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter); 
userControl.RenderControl(htmlWriter); 
string html = stringWriter.ToString(); 

在這之後,你必須將html變量追加到你的迴應。

此代碼應放置在或標記爲的WebMethod的方法的HTTP處理程序,以便您可以從javacript調用它。

Sample: Calling WebMethods from javascript

Sample: Calling HTTP Handlers from javascript

+0

感謝您的回答...對不起,我含糊不清,幾乎我只想從用戶控件獲取呈現的HTML。我應該指定我想用jQuery AJAX來獲取控件的html。 – 2010-06-18 18:40:55

+1

頁面生命週期如何?你只在這裏調用渲染。假設page_load中有啓動邏輯或其他事件之一? – davidfowl 2010-06-19 08:13:09

+0

是的,我知道,但如果他真的需要這樣做,那麼他需要加入。權衡決定。 – 2010-06-19 16:51:01