【问题标题】:How to remove ViewState and EventValidation data in ASP.NET Control render to string?如何删除 ASP.NET 控件中的 ViewState 和 EventValidation 数据呈现为字符串?
【发布时间】:2011-10-05 03:46:38
【问题描述】:

我正在使用以下方法将用户控件呈现为字符串:

Page pageHolder = new Page();
pageHolder.EnableViewState = false;

UserControl viewControl = (UserControl)pageHolder.LoadControl(path);
viewControl.EnableViewState = false;

System.Type viewControlType = viewControl.GetType();
HtmlForm tempForm = new HtmlForm();
tempForm.EnableViewState = false;

tempForm.Controls.Add(viewControl);
pageHolder.Controls.Add(tempForm);

StringWriter output = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, output, false);

string content = output.ToString();

但是,在输出中,有时隐藏字段包含 __EVENTVALIDTION__VIEWSTATE 信息以及用于启用 PostBack 的 JavaScript。

有没有办法完全禁止为我要呈现的控件生成所有与 WebForms/ViewState 相关的代码?将EnableViewState 设置为false 并在.ascx 文件中设置EnabledViewState="false" 似乎不起作用。

【问题讨论】:

    标签: c# asp.net webforms


    【解决方案1】:

    你试过了吗

    <pages enableViewState="false" enableEventValidation="false">
    ...
    </pages>
    

    在您的 web.config 上?

    我不确定这是否是一个好主意,但我假设您知道自己在做什么。

    【讨论】:

    • 这不是针对整个应用程序吗?
    • @JamesJohnson 是的,这不是他想要的吗?他说:Is there a way to completely disable all WebForms/ViewState related code from being generated? Setting EnableViewState to false doesn't seem to work.
    • 我的印象是 OP 只是想为页面或控件禁用它......不过你可能是对的......
    • @Icarus - James 是对的,我的意思是针对特定的用户控制。我更新了我的问题以反映这一点。
    【解决方案2】:

    您可以在用户控件的指令中设置EnableViewState="false"。至于禁用事件验证,我相信你只能通过 web.config 或 page 指令来做到这一点。

    【讨论】:

    • 我认为您无法完全摆脱隐藏字段。我认为您可以控制保存到 ViewState 的内容。有没有考虑拿到字符串后解析出来?
    • 我目前正在解析它。但是,我宁愿不这样做,因为我有一堆条件检查值是否存在。
    猜你喜欢
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 2016-10-10
    相关资源
    最近更新 更多