我使用asp.net和aspx页面中的此代码:
public partial class Default : System.Web.UI.Page
{
string _Name;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
_Name = "Maikel";
ViewState["Name"] = _Name;
}
}
protected void btnAddName_Click(object sender, EventArgs e)
{
if (ViewState["Name"] == null)
{
txtName.Text = "Empty";
}
else
{
txtName.Text = ViewState["Name"].ToString();
}
}
}
没关系。并在文本框中显示“ Maikel”。
但是当我使用此代码时:
<%@ Page Language="C#" AutoEventWireup="true" **ViewStateMode="Disabled" EnableViewState="true**" CodeBehind="Default.aspx.cs" Inherits="WebApplication3.Default" %>
ViewState["Name"]
是Empty
!并在文本框中显示“ Empty
”。为什么?请帮助我在
ViewState
中使用ViewStateMode="Disabled" EnableViewState="true"
。编辑:
我使用母版页和(使用母版页中的网页),并在母版页中编写以下代码:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site1.master.cs" ViewStateMode="Disabled" EnableViewState="true" Inherits="WebApplication3.Site1" %>
并在页面后面的代码(使用母版页的网络)中输入代码
ViewState["Name"]
,ViewState不为空!为什么? 最佳答案
在您的情况下,您已通过在页面级别设置ViewStateMode="Disabled"
禁用了整个页面的ViewState属性。这就是为什么您没有在视图状态下得到任何东西的原因。
ASP.NET View State Overview
要默认禁用整个页面的视图状态,请设置
@ Page指令的ViewStateMode属性设置为Disabled。
Control.ViewStateMode Property(MSDN)
禁用页面的视图状态并为特定页面启用它
页面上的控件,设置页面的EnableViewState属性
并将控件设置为true,将页面的ViewStateMode属性设置为
禁用,并将控件的ViewStateMode属性设置为
已启用。
页面或控件的ViewStateMode属性仅具有作用
如果EnableViewState属性设置为true。如果EnableViewState
属性设置为false,即使
ViewStateMode属性设置为Enabled。
编辑:
在页面中使用ViewState。
您可以将所有控件放置在面板中,并且可以将该面板的ViewState设置为false。在页面级别启用ViewStateMode
,您将可以在后面的代码中使用ViewState
对于MasterPage,您可以在ContentPlaceHolder
上禁用ViewState
<asp:ContentPlaceHolder ID="HeadContent" runat="server" EnableViewState="false">
</asp:ContentPlaceHolder>
并在母版页级别启用
ViewStateMode