0

ページレベルではビューステートが無効になっているが、ドロップダウンコントロールでは有効になっている.Net3.5Webアプリケーションがあります。ドロップダウンのポストバック中に、次の例外が発生します

オブジェクト参照がオブジェクト インスタンスに設定されていません。

この例外は次の行で発生します。

string selectedVal = ddlStatus.SelectedItem.Value;

Control.ViewStateModeプロパティは以降.Net 4.0です。使っていたら目的に合った4.0

ページのビューステートを無効にし、ページ上の特定のコントロールに対して有効にするには、ページのEnableViewStateプロパティとコントロールをtrueに設定し、ページのViewStateModeプロパティをDisabledに設定し、コントロールのViewStateModeプロパティを設定します。有効に。

.Net 3.5 Frameworkを使用している場合、どうすれば問題を解決できますか?

コード

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; }
}

マークアップ

<%@ 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. EnableViewStateがFalseに設定されている場合、サーバーコントロールはその状態を保持します
  2. ビューステートの最小化-asp.net4.0の`EnableViewState`と`ViewStateMode`によって混乱します
  3. DropDownListでEnableViewStateが機能しない
4

1 に答える 1

1

ページ全体に対して viewstate をオフに設定すると、一部のコントロールでは有効にできません。!

もう 1 つの方法では、ページを有効にして、保持したいコントロールを除いて、各コントロールを個別に閉じます。

于 2013-02-28T08:05:22.270 に答える