4

default.aspx ページには、DropDownListではない場合にのみ分離コードに入力される がありますpostback。値が選択されると、選択された値で a を満たすメソッドが呼び出さLiteralれます。期待どおりに動作します。問題は、ページをコントロールでのみEnableViewState有効にしないように設定した場合です。DropDownListこの場合、DropDownListポストバックするとアイテムが失われます。これをテストするためだけに、新しい Web プロジェクトをセットアップしました。簡単にするためのマスターページはありません。

デフォルト.aspx:

<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication4._Default" 
    EnableViewState="false" %>

<asp:DropDownList ID="DDL" runat="server" 
    OnSelectedIndexChanged="DDL_OSIC" 
    AutoPostBack="true" 
    EnableViewState="true">
</asp:DropDownList>

<asp:Literal ID="Literal1" runat="server"></asp:Literal>

Default.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        DDL.Items.Add("red");
        DDL.Items.Add("green");
        DDL.Items.Add("blue");
    }
}
protected void DDL_OSIC(object sender, EventArgs e)
{
    Literal1.Text = DDL.SelectedValue;
}

EnableViewState が機能しないのはなぜですか?

4

2 に答える 2

4

削除された回答の助けを借りて回答を見つけました。削除された回答は、不完全だったという理由だけで間違っていました。そのヒントで、ViewStateMode プロパティ ページを見つけました。

すべてのコントロールの ViewState を無効にし、選択したものだけを有効にするように要約すると、次のようになります。

  • ページとすべてのコントロールのEnableViewStateプロパティの両方を に設定しますtrue。これがデフォルトなので何も書く必要はありません
  • ページViewStateModeDisabled
  • ViewState を有効にするコントロールに設定ViewStateModeEnabledます。
于 2012-08-02T23:17:47.223 に答える
-3

私のコンピューターで、Webアプリケーションを作成します。結果はあなたと同じです。ページのビューステートがfalseの場合、コントロールのビューステートは機能しないと思います。

于 2012-09-13T09:56:31.873 に答える