1

いくつかのコントロールがオンになっているページがあります。コントロールのプロパティ/値の一部は、データベースからロードされます。その他は例えばです。1 ~ 31 の数字、1900 年 ~ 2012 年などの日付コンボ ボックスです。for ループでコンボ ボックスを設定したいのですが、Page_Init の早い段階でそれを行うと、すべての値が入力されることに気付きました。ビューステート。コントロールが非表示のときにポストバック全体で値を維持する必要があるため、これらのコントロールでビューステートを無効にしたくありません。

事実上、私はASP.NETがコントロールのデフォルト値をどのように決定するかを尋ねています-マークアップに値を入力してもビューステートに値を入れません.プログラムでそれを再現する方法を誰かが知っているかどうか疑問に思っていました. ?


test2.aspx

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test2.aspx.vb" Inherits="test2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:DropDownList ID="ddlTest" runat="server"></asp:DropDownList>
    </div>
    </form>
</body>
</html>


test2.aspx.vb

部分クラス test2 継承ページ

Protected Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
    If Request("addvals") IsNot Nothing Then
        For i As Integer = 0 To 1000
            ddlTest.Items.Add(i)
        Next
    End If
End Sub

クラス終了

4

3 に答える 3

0

この記事によると(重複する質問にリンクされています)、コントロールを動的に作成し、コントロールコレクションに追加する前にデータバインドすることができます。これは、データバインドされたコントロールが過剰なアイテムテンプレートを使用しない場合(つまり、DropDownListであり、GridViewではない場合)に適しています。もう1つのオプションは、コントロールのViewStateを無効にし、非表示のコントロールの状態をViewStateディクショナリに手動で保存することです。

于 2012-10-27T15:20:28.143 に答える
0

これの複製を見つけたばかりです-それは不可能のようです... ビューステートに追加せずにコードビハインドでasp.netコントロールプロパティ値を設定することは可能ですか?

于 2012-10-24T09:08:42.460 に答える
-1

Initフェーズ中に追加された値は、ViewStateに永続化されません(ViewState StateBagに追加されますが、ダーティとしてマークされません)。

ViewStateの追跡中にデフォルトのプロパティを設定する場合(たとえば、ロードフェーズ中以降)、ViewStateに永続化したくない場合は、コントロールをページのコントロールツリーに追加する前に設定します。例えば

Label label1 = new Label();
label1.Text = "Some text" // Not persisted to ViewState
Page.Controls.Add(label1);

Label label2 = new Label();
Page.Controls.Add(label2);
label2.Text = "Some text" // Persisted to ViewState
于 2012-10-24T09:00:36.533 に答える