在不触发'需要放置在具有runat=""的表单内;服务器"'消息



我正在尝试抓取我自己的ASPX页面,以便将其提供给HTML敏捷包解析器。我已经尝试了所有的方法,在这种情况下,字符串是我唯一能使用的东西。

我使用以下代码将外部控件转换为字符串:

static string ConvertControlToString(Control ctl)
{
string s = null;
var sw = new StringWriter();
using (var w = new HtmlTextWriter(sw))
{
ctl.RenderControl(w);
s = sw.ToString();
}
return s;
}

这个概念是可行的,除了一些烦人的小故障。我得到了";控件必须在具有runat=server"的窗体内;有时。它似乎是由导致回发的控件触发的——按钮、更新面板等。

需要明确的是,我的页面是表单,所以这不是问题所在。

我需要尝试找到一个解决问题的方法,无论是让HTML敏捷包解析器以另一种方式工作,还是将代码转换为没有错误的字符串。没关系,我只需要把事情做好。

在尝试了很多错误之后,我找到了一个有效的解决方案,因为它可以解决问题。然而,它也引入了潜在的安全问题,因此您需要警惕它的使用方式。

只需在页面中添加以下内容:

  1. EnableEventValidation=";false">
  2. 公共重写void VerifyRenderingInServerForm(控件({}

以下是微软对禁用事件验证的看法:

此功能降低了未经授权或恶意回发请求和回调的风险。强烈建议您不要禁用事件验证。

但是,在不回发的页面上使用是安全的。

相关内容

最新更新