我試圖實現類似於this或this的東西。Asp.Net AJAX調用的單控制呈現
我創建了一個用戶控件,一個web服務和一個web方法來返回控件的呈現html,通過jQuery執行ajax調用。
所有的工作都很好,但是如果我在使用相對路徑的用戶控件(在我的情況下是一個帶有NavigateUrl =「〜/ mypage.aspx」的HyperLink)的東西放在我的開發服務器的相對路徑的解析失敗。
我期待: http://localhost:999/MyApp/mypage.aspx
,但我得到: http://localhost:999/mypage.aspx
缺少 'MyApp的' ......
我認爲這個問題是用來加載生成頁的控制:
Page page = new Page();
Control control = page.LoadControl(userControlVirtualPath);
page.Controls.Add(control);
...
但我不明白爲什麼....
編輯 只是爲了清楚起見
我的用戶控件位於~/ascx/mycontrol.ascx
,幷包含一個非常簡單的結構:由現在只是一個像"~/mypage.aspx"
與NavigateUrl超鏈接。 而「mypage.aspx」確實位於根目錄下。
然後我做了一個Web服務,返回阿賈克斯部分呈現的控制:
[ScriptService]
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class wsAsynch : System.Web.Services.WebService
{
[WebMethod(EnableSession = true)]
public string GetControl(int parma1, int param2)
{
/* ...do some stuff with params... */
Page pageHolder = new Page();
UserControl viewControl = (UserControl)pageHolder.LoadControl("~/ascx/mycontrol.ascx");
Type viewControlType = viewControl.GetType();
/* ...set control properties with reflection... */
pageHolder.Controls.Add(viewControl);
StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);
return output.ToString();
}
}
的HTML是正確呈現,但在超鏈接的NavigateUrl相對路徑不正確地解決,因爲當我從VS2008開發的服務器執行的項目,我的應用程序的根是
和它的罰款,但NavigateUrl被解析爲
http://localhost:999/mypage.aspx
lost/MyApp /。 當然,如果我把我的ascx放在一個真實的頁面中,而不是ws中使用的pageHolder實例,所有工作都正常。
另一個奇怪的事情是,如果我設置hl.NavigateUrl = Page.ResolveUrl("~/mypage.aspx")
我得到的頁面的正確網址: http://localhost:999/MyApp/mypage.aspx
而現在我會做到這一點,但我想明白爲什麼它不工作正常的方式。 有什麼想法?
在頁面/控件生命週期中,你會調用'hl.NavigateUrl = Page.ResolveUrl(「〜/ mypage.aspx」)'?在這之前,你是否在代碼中的同一個地方運行'hl.NavigateUrl =「〜/ mypage.aspx」'? – awe 2010-09-15 07:10:08