RUL重写后页面回传失效、

著名天才___ 2011-09-05 11:20:44
解决方案


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.UI;

namespace YuanBoV4.Group
{
/// <summary>
/// 控制RUL重写后、回传失效
/// </summary>
public class PostbackUrlReg : System.Web.UI.Page
{
//// <summary>
/// 重写默认的HtmlTextWriter方法,修改form标记中的value属性,使其值为重写的URL而不是真实URL。
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter writer)
{
if (writer is System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}

base.Render(writer);
}
}


public class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
public FormFixerHtml32TextWriter(TextWriter writer)
: base(writer)
{
}

public override void WriteAttribute(string name, string value, bool encode)
{
// 如果当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL
if (string.Compare(name, "action", true) == 0)
{
value = HttpContext.Current.Request.RawUrl;
}
base.WriteAttribute(name, value, encode);
}
}


public class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
public FormFixerHtmlTextWriter(TextWriter writer)
: base(writer)
{
}

public override void WriteAttribute(string name, string value, bool encode)
{
if (string.Compare(name, "action", true) == 0)
{
value = HttpContext.Current.Request.RawUrl;
}

base.WriteAttribute(name, value, encode);
}
}
}

这个是OK的、

问题来了。
如果引起回传 是在用户控件中 .ascx、那么上面的方案就失效了、 再求个解决方案
...全文
100 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
SeanDing1989 2011-09-05
  • 打赏
  • 举报
回复
引入个dll

ActionlessForm.dll

页面注册一下:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
然后你页面的form改成:<skm:form></form>
KeepMoving 2011-09-05
  • 打赏
  • 举报
回复
帮顶吧,没遇到过!
highpr 2011-09-05
  • 打赏
  • 举报
回复
aspx里实现读取数据
ascx里实现回传
get{}
set{}
ajaxtop 2011-09-05
  • 打赏
  • 举报
回复
只知道页面 回传,控件只会有事件,没搞明白
子夜__ 2011-09-05
  • 打赏
  • 举报
回复
友情UP.
著名天才___ 2011-09-05
  • 打赏
  • 举报
回复
有办法吗
著名天才___ 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liuchaolin 的回复:]

ascx必须要aspx引用,不能直接被访问
[/Quote]

我说的就是 ascx在aspx中、上面的解决方案 会失效
md5e 2011-09-05
  • 打赏
  • 举报
回复
ascx必须要aspx引用,不能直接被访问
posefooler 2011-09-05
  • 打赏
  • 举报
回复
那你就不要嵌套ascx了,用的时候单个的调用就好了呗。要不就是在新建一个用户控件包含2个控件的功能。
著名天才___ 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 sp1234 的回复:]

引用 2 楼 zhumingtiancai 的回复:
我说的就是 ascx在aspx中、上面的解决方案 会失效


不懂!

你的意思是说你的aspx“偏要”不继承于PostbackUrlReg是吗?
[/Quote]
我说的是 如果是在aspx页面里面的控件引起的回传 可以解决、
现在的控件在ascx里面、这样子 就解决不了了。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhumingtiancai 的回复:]
我说的就是 ascx在aspx中、上面的解决方案 会失效
[/Quote]

不懂!

你的意思是说你的aspx“偏要”不继承于PostbackUrlReg是吗?
LQ_651119244 2011-09-05
  • 打赏
  • 举报
回复
我的想法是再做个用户控件的基类,跟Page类一样也重写一下,不知道行不行
著名天才___ 2011-09-05
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 seanding1989 的回复:]

引入个dll

ActionlessForm.dll

页面注册一下:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
然后你页面的form改成:<skm:form></form>
[/Quote]

我试过了 木有效果,悲剧

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧