我使用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

10-03 00:49