Hej netcoders,
Jeg har kodet en applikation med brug af URL rewrite. Og det ser ud til at virke fint... så længe man ikke går igang med at bruge event-handlere.
Scenario:
Jeg vil oprette en entry i min database. Til det bruger jeg en form. Jeg bruger URL rewrite til at omskrive adressen "/front-end/add-entry.aspx" til ”/entry/add/”.
- Dvs. jeg både tilgår og submitter formen på adressen "/entry/add". Hvor jeg har reélt set fat i filen "/front-end/add-entry.aspx".
Problemet:
Jeg kan ikke ændre min Web Form's action-property på nogen måde. Og som standard er Web Form'en sat til at pege på sin egen side. Så når klienten submitter formen, bliver klienten smidt til adressen "/add-entry.aspx" hvor klienten skulle til "/entry/add/".
- Ikke nok med at .NET motoren breaker min URL rewrite. Den breaker også koden:
Web Form'en bliver ikke sat korrekt af .NET motoren. Hvis den gjorde ville klienten bliver smidt til "/front-end/add-entry.aspx" og koden ville stadig virke. Omend URL ikke var som tiltænkt.
Ifølge en artikel på MSDN kan man imidlertid undgå dette problem ved selv at lave en custom Web Form. Og på den måde selv sætte min action-property:
namespace ActionlessForm
{
public class Form : System.Web.UI.HtmlControls.HtmlForm
{
protected override void RenderAttributes(HtmlTextWriter writer) {
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render(writer);
base.Attributes.Remove("action");
if (base.ID != null) {
writer.WriteAttribute("id", base.ClientID);
}
}
}
Kilde:
http://msdn2.microsoft.com/en-us/library/ms972974.aspx (se: Handling Postbacks).
Jeg kan godt få formen til at virke. Jeg kan også sætte min action-property, så formen post-back'er til den rigtige adresse. Men event-handlingen er ikke-eksisterende.
Mit spørgsmål er så: hvordan kan jeg få URL rewrite til at virke sammen med event-handling i min kode? Bliver jeg nød til at droppe event-handlingen?