技术开发 频道

在ASP.NET中如何实现和利用URL重写


处理回送数据(Postback)


    当在ASP.NET中使用URL重写方法的时候,经常引发一个潜在的问题:在一个页面回送数据给服务器的时候,原先干净的输入URL通常不会被保存。举个例子来说,你使用诸如“~/Movies/Action.aspx”之类的简洁URL输入了一个网址,但是当你点击一个按钮执行回送数据给服务器的时候,这个网址将会变回实际的URL——“~/Movies.aspx?MovieType= Action”。

    问题的根源在于<form runat="server"> 标签Action动作的属性,它使用真实的URL而不是输入的网址。

    解决这个问题的一个简单的办法是通过扩展继承已有的form标签来实现你自己的form标记版本。然后你可以设置其action为输入的URL而不是重写的那个。参看以下示例:

    代码清单4:定制的form标记可以处理URL重写的数据回送

public class RewriteForm : HtmlForm {

protected override void
RenderAttributes(System.Web.UI.HtmlTextWriter writer) {

// Name
writer.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");

// Method
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");

this.Attributes.Render(writer);

// Action
String action = Context.Request.RawUrl;

if (action != null) {
writer.WriteAttribute("action", action);
}
base.Attributes.Remove("action");

// ID
if (base.ID != null) {
writer.WriteAttribute("id", base.ClientID);
}
}
}
    使用以上代码,你现在可以使用<MyTags:RewriteForm ID="form1" runat="server"> 标记,而不用使用标准的<form id="form1" runat="server"> 标记,这样即使在数据回送过程中,也将保持网址不变。
0
相关文章