在页面视图状态关闭时在下拉列表上启用viewstate

时间:2013-02-28 07:20:17

标签: asp.net

我有一个.Net 3.5 Web应用程序,它在页面级别禁用了视图状态,但在下拉控件上启用了。在下拉回发期间,我收到以下异常

  

对象引用未设置为对象的实例。

此异常发生在以下行:

string selectedVal = ddlStatus.SelectedItem.Value;

Control.ViewStateMode Property来自.Net 4.0。如果我使用4.0

,它符合目的
  

要禁用页面的视图状态并为页面上的特定控件启用它,请将页面的EnableViewState属性和控件设置为true,将页面的ViewStateMode属性设置为Disabled,并设置ViewStateMode属性控件的启用。

当我使用.Net 3.5框架时,我们如何解决问题?

CODE

public partial class FormattingTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        Status status1 = new Status() { StatusCode = 1, StatusDescription = "Inctive" };
        Status status2 = new Status() { StatusCode = 2, StatusDescription = "Active" };
        List<Status> statucCollection = new List<Status>();
        statucCollection.Add(status1);
        statucCollection.Add(status2);

        ddlStatus.DataTextField = "StatusDescription";
        ddlStatus.DataValueField = "StatusCode";
        ddlStatus.DataSource = statucCollection;
        ddlStatus.DataBind();

        //Assembly Version - 3.5.0.0 
        string version = System.Reflection.Assembly
                .GetExecutingAssembly()
                .GetReferencedAssemblies()
                .Where(x => x.Name == "System.Core").First().Version.ToString();

        Response.Write(version);

    }

    string selectedVal = ddlStatus.SelectedItem.Value;
    int y = 0;
}
}

public class Status
{
public int StatusCode { get; set; }
public string StatusDescription { get; set; }
}

MARKUP

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="FormattingTest.aspx.cs" Inherits="FormattingTest"
EnableViewState="false"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:DropDownList ID="ddlStatus" runat="server" AutoPostBack="true" EnableViewState="true" >
</asp:DropDownList>
</form>
</body>
</html>

参考

  1. Server controls persist their state when EnableViewState is set to False
  2. Minimizing viewstate- confused by `EnableViewState` and `ViewStateMode` in asp.net 4.0
  3. EnableViewState not working in DropDownList

1 个答案:

答案 0 :(得分:1)

如果您为整页设置视图状态,则无法为某些控件启用它。

另一种方法可以完成,启用页面,并在每个控制分离上关闭它,除了你想保留的那个。