Asp.Net, URL Rewriter Modul und Postback/Updatepanel

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

Add comment


 

  Country flag

biuquote
  • Comment
  • Preview
Loading