I found a nice sample (http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx) on how to set the action attribute of a form HTML element. However when an ajax request is made the code throws a NPE:
I would appreciate any solution on how to set the action attribute for a form or solving this peculiar problem.. Thanks
Code:
public class FormControlAdapter : ControlAdapter
{
protected override void Render(HtmlTextWriter writer)
{
base.Render(new FormWriter(writer)); //Throws NPE when a ajax request is made
}
}
public class FormWriter : HtmlTextWriter
{
public FormWriter(HtmlTextWriter writer)
: base(writer)
{
base.InnerWriter = writer;
}
public FormWriter(TextWriter writer)
: base(writer)
{
base.InnerWriter = writer;
}
public override void WriteAttribute(string name, string value, bool fEncode)
{
if (name == "action")
{
if (HttpContext.Current.Items["ActionWritten"] == null)
{
value = HttpContext.Current.Request.RawUrl;
HttpContext.Current.Items["ActionWritten"] = true;
}
}
base.WriteAttribute(name, value, fEncode);
}
}
System.NullReferenceException was unhandled by user code
Message="Object reference not set to an instance of an object."
Source="System.Web.Extensions"
StackTrace:
at System.Web.UI.PageRequestManager.RenderFormCallback(HtmlTextWriter writer, Control containerControl)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
at System.Web.UI.Adapters.ControlAdapter.Render(HtmlTextWriter writer)
at FormControlAdapter.Render(HtmlTextWriter writer) in line 23
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
at System.Web.UI.HtmlFormWrapper.System.Web.UI.IHtmlForm.RenderControl(HtmlTextWriter writer)
at System.Web.UI.PageRequestManager.RenderPageCallback(HtmlTextWriter writer, Control pageControl)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Page.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
InnerException:
I would appreciate any solution on how to set the action attribute for a form or solving this peculiar problem.. Thanks
Last edited by a moderator: