Ich versuche, etwas Ähnliches zu implementieren this oder this.Asp.Net Single Control Render für AJAX Anrufe
Ich habe ein Benutzersteuerelement, einen Webdienst und eine Webmethode erstellt, um das gerenderte HTML des Steuerelements zurückzugeben und die Ajaxaufrufe über jQuery auszuführen.
Alles funktioniert gut, aber wenn ich etwas in das Benutzersteuerelement, das einen relativen Pfad verwendet (in meinem Fall ein HyperLink mit NavigateUrl = "~/mypage.aspx"), schlägt die Auflösung des relativen Pfades in meinem Entwicklungsserver.
Ich erwarte: http://localhost:999/MyApp/mypage.aspx
Aber ich bekomme: http://localhost:999/mypage.aspx
fehlt 'MeineAnw' ...
Ich denke, das Problem auf die Schaffung der Seite verwendet laden die Steuerung:
Page page = new Page();
Control control = page.LoadControl(userControlVirtualPath);
page.Controls.Add(control);
...
Aber ich kann nicht herausfinden, warum ....
EDIT Gerade für Klarheit
Meine Benutzerkontrolle bei ~/ascx/mycontrol.ascx
und enthält eine wirklich einfache Struktur befindet: jetzt nur einen Hyperlink mit NavigateUrl wie "~/mypage.aspx"
. Und "mypage.aspx" liegt wirklich auf der Wurzel.
dann die teilweise gemacht Kontrolle Ajax Ich habe einen Web-Service aus zurück:
[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();
}
}
Die HTML korrekt gerendert wird, aber der relative Pfad im NavigateUrl Hyperlink falsch behoben ist, denn wenn ich führe sie das Projekt vom Server von VS2008 entwickeln, die Wurzel meiner Anwendung ist
und es ist in Ordnung, aber die NavigateUrl als
aufgelösthttp://localhost:999/mypage.aspx
verlieren/MyApp /. Natürlich, wenn ich meine Ascx in eine reale Seite statt der pageHolder-Instanz in der WS verwendet, funktioniert alles gut.
Eine weitere seltsame Sache ist, dass, wenn ich die hl.NavigateUrl = Page.ResolveUrl("~/mypage.aspx")
stelle ich die richtige URL der Seite zu erhalten: http://localhost:999/MyApp/mypage.aspx
Und jetzt werde ich das tun, aber ich würde verstehen, warum es nicht in die funktioniert normale Art und Weise. Irgendeine Idee?
Wo auf der Seite/Steuerung Lebenszyklus nennt man 'hl.NavigateUrl = Page.ResolveUrl ("~/MyPage.aspx")'? Bevor Sie dies getan haben, haben Sie einfach 'hl.NavigateUrl =" ~/mypage.aspx "' an derselben Stelle im Code ausgeführt? – awe