Tags: , , , | Categories: ASP.Net, VB.Net Posted by Christoph on 10/1/2008 12:23 PM | Comments (0)
Der IIS 7 hat nun endlich ein schönes Rewrite Modul bekommen. Nun ergibt sich aber das Problem, das sowohl beim Postback, als auch, was natürlich damit zusammenhängt, im Updatepanel jedesmal die falsche Zielurl benutzt wird. Dies lässt sich so beheben: 1) eine neue form.browser im /App_Browsers anlegen, die so aussieht: <browsers> <browser refID="Default"> <controlAdapters> <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" /> </controlAdapters> </browser> </browsers> 2) eine FormRewriterControlAdapter.vb im Projekt hat, die so aussieht: Imports Microsoft.VisualBasic Public Class FormRewriterControlAdapter Inherits System.Web.UI.Adapters.ControlAdapter Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter) MyBase.Render(New RewriteFormHtmlTextWriter(writer)) End Sub End Class Public Class RewriteFormHtmlTextWriter Inherits HtmlTextWriter Sub New(ByVal writer As HtmlTextWriter) MyBase.New(writer) Me.InnerWriter = writer.InnerWriter End Sub Sub New(ByVal writer As System.IO.TextWriter) MyBase.New(writer) MyBase.InnerWriter = writer End Sub Public Overrides Sub WriteAttribute(ByVal name As String, ByVal value As String, ByVal fEncode As Boolean) If (name = "action") Then Dim Context As HttpContext = HttpContext.Current If Context.Items("ActionAlreadyWritten") Is Nothing Then value = Context.Request.RawUrl Context.Items("ActionAlreadyWritten") = True End If End If MyBase.WriteAttribute(name, value, fEncode) End Sub End Class Ich habe diesen Tipp in Scott Gu’s Blog bei “Handling ASP-NET PostBacks with URL Redirecting” gefunden