2

これが問題です。

ラベル、ドロップダウンリスト、送信ボタンのある小さなページがあります。

<div>
    <asp:label id="Message" runat="server"/> 
        <br />
        Which city do you wish to look at on hotels for?<br /><br />
        <asp:dropdownlist id="Dropdownlist1" runat="server" EnableViewState="true">
        </asp:dropdownlist>
        <br /><br /><br /><br />
        <input type="Submit" />     
</div>

フォームの読み込み時にドロップダウンリストにアイテムを挿入し、ボタンをクリックするとドロップダウンリスト内のアイテムの数が表示されます。そのためのコードは次のとおりです。

if (Page.IsPostBack) { Message.Text = "You have selected " + Dropdownlist1.Items.Count.ToString(); } else { Message.Text = "You have selected " + Dropdownlist1.Items.Count.ToString(); Dropdownlist1.Items.Add("Madrid"); Dropdownlist1.Items.Add("Chennai"); Dropdownlist1.Items.Add("New York"); }

これが面白い部分です。IDEから直接実行すると、完全に正常に機能します。初めて0としてカウントされ、送信ボタンを押すと3としてカウントされます。この小さなコードを既存の仮想ディレクトリで実行する必要があります。その仮想ディレクトリ内で同じaspxページを実行すると、初めてロードされるときにカウント0が取得されます。[送信]をクリックすると、0としてカウントされ、ドロップダウンリストにアイテムが表示されません。クリアされます。挿入されたものを思い出せるように、viewstateをtrueに設定しました。

IDEから実行した場合と、別の仮想ディレクトリから実行した場合の違いはわかりません。私はAsp.Netにかなり慣れていないので、ここですべてのオプションを調べて、ドロップダウンリストがどのように機能するかを調べました。ここに欠けている設定はありますか?

参考までに、DropDownListをウィザードコントロールに配置したときに同じ問題が発生します。IDEから実行すると正常に動作しますが、仮想ディレクトリから実行すると、選択した値が取得されず、ドロップダウンリストの項目も記憶されません。

これに関する助けをいただければ幸いです。


申し訳ありません:(、さらにいくつかの質問

コードによると、リストはPostBackでない場合にのみ入力されます。したがって、ボタンをクリックすると、リストは空になります。リストに動的にデータを入力すると、アイテムは記憶されません。各Page_loadに追加する必要があります。ビューステートは、選択されたアイテムのみを記憶します。

ページがIDEから直接実行されたときにアイテムを記憶し、仮想ディレクトリから実行したときに記憶しない方法。それを機能させるために設定する必要があるかもしれないビューステートはありますか?キャッシュ設定もあまりうまくいきませんでした。トレース情報を有効にしました。面白いことに、:|、仮想ディレクトリからではなく、IDEから直接実行するとトレースが発生します。もう一度質問しますが、子ディレクトリのweb.configは親web.configを上書きする必要がありますか?

返信ありがとうございます。

4

3 に答える 3

4

ページレベルでEnableViewStateが無効になっているようです。他の応答とは異なり、ViewStateが有効になっている場合は、PostBackにリストを再入力する必要はありません。

ページヘッダーにEnableViewState="true"属性を追加してみてください。

バグだと思います。ページレベルでEnableViewState="false"、コントロールレベルでEnableViewState = "true"の場合、ViewStateは本来あるべきようにコントロールに保持されません。

特定のコントロールに対してのみViewStateを有効にする場合は、ページレベルでEnableViewState = "true"を設定してから、ViewStateを保持したくないコントロールに対してEnableViewState="false"を設定します。逆に、私は知っていますが、それが唯一の回避策です。

于 2008-10-13T19:06:36.717 に答える
2

これは私のために働いた

 protected void Page_Load(object sender, EventArgs e)
{
            if(!IsPostBack)
            FillApplicationDropDown();
}
于 2012-10-30T06:49:54.397 に答える
0

仮想ディレクトリにあるときにページがキャッシュされている可能性があります。

これをPage_Loadに追加してみてください

Response.Cache.SetCacheability(HttpCacheability.NoCache)

キャッシュは設定ファイルを使用してディレクトリに適用できると思います。だから、これが違いかもしれません。

于 2008-10-13T18:32:29.330 に答える