我似乎无法为我动态添加到页面的控件禁用ViewState。
ASPX
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Page1.aspx.cs" Inherits="Page1" EnableViewState="false" %>
...
<asp:PlaceHolder ID="DropDownPlaceHolder" runat="server" EnableViewState="false" />
<asp:Button ID="Submit" runat="server" OnClick="Submit_OnClick" Text="Click Me!" EnableViewState="false"/>
...
ASPX.CS
protected override void OnInit(EventArgs e)
{
DropDownList dropDown = new DropDownList();
TextBox textBox = new TextBox();
textBox.EnableViewState = false;
dropDown.Items.Add("Apple");
dropDown.Items.Add("Dell");
dropDown.Items.Add("HP");
dropDown.AutoPostBack = true;
dropDown.EnableViewState = false;
DropDownPlaceHolder.Controls.Add(dropDown);
DropDownPlaceHolder.Controls.Add(textBox);
base.OnInit(e);
}
如果我无法在这些控件上禁用ViewState,那么我永远无法以编程方式覆盖用户输入/选择的内容。
我已尝试将此代码放在OnInit和Page_Load中,但在任一位置的效果都相同 - 启用了ViewState(DropDownList维护选定的值,TextBox保留输入的文本)。
那么,如何禁用ViewState并防止它填充这些控件?
谢谢!
感谢您的回复。 不幸的是,在我的情况下,这不是一个可行的解决方案。
我将基于配置文件动态加载控件,其中一些控件将加载子控件。
我需要能够单独关闭控件的ViewState,而不需要在不同的地方加载控件的代码逻辑(在OnInit与LoadComplete中) 法)。
答案 0 :(得分:3)
@This Mat
似乎帖子(后面)会发送所选的值,即使控件的视图状态已关闭。
是。帖子将始终发送控件选定/当前值。这是HTTP表单发布的行为,与ASP.NET控件/视图状态无关。
答案 1 :(得分:2)
您看到的是{。3}}与.Net Framework 2.0一起引入的内容。它旨在存储控件的绝对最小信息,例如DropDownList
中的选择和TextBox
中的文本。仅与外观相关的属性(例如BackColor
)仍保留在ViewState
中。
与ViewState
ControlState
不同。
我只能假设这是为了避免最终用户的混淆,如果他们在没有理解后果的情况下禁用ViewState
时控件不能执行预期的操作。
答案 2 :(得分:1)
这是一个“功能” - http://support.microsoft.com/?id=316813
谢谢,微软!!
答案 3 :(得分:0)
我测试了一下,发现它有点奇怪。似乎帖子(后面)将发送所选的值,即使控件的视图状态已关闭。
我确实找到了一个很好的解决方案,如果你在init和load之后处理所有内容,你将在viewstate处理完毕后重新加载你的控件,然后重置值。
我使用了LoadComplete事件,例如:
Public Sub Page_In(ByVal sender As Object, ByVal e As EventArgs) _ Handles Me.LoadComplete Dim ddl As New DropDownList() ddl.EnableViewState = False ddl.Items.Add("Hello") ddl.Items.Add("Stackoverflow") phTest.Controls.Add(ddl) End Sub
希望这有帮助。