3

私は列挙型を使用しているasp.netページを持っています(app_codeのクラスファイルでプロパティが定義されています)

今私の問題は、ページがポストバックを取得するたびに、プロパティの列挙型の値が最初のものにリセットされることです

プロパティを静的に設定しようとしましたが、それでも役に立ちませんでした。

以下であり

私の列挙型とプロパティの宣言:

private static UrlType _type;
public static UrlType UrlPattern
{
    get
    {
        HttpContext.Current.Response.Write("GET: " +_type + "<br>");
        return _type;
    }
    set
    {
        _type = value;
        HttpContext.Current.Response.Write("SET : " +_type + "<br>");
    }
}
public int VanityId { get; set; }
public enum UrlType
{
    ArticleOnly,
    ArticleCategoryCombination,
    Normal,
    TechForum
}

これが私が呼び出す方法です:

public void BindRewrite()
{
    GrdRewrite.DataSource = objVanity.GetAllRewriteVanities(Vanity.UrlPattern);
    GrdRewrite.DataBind();
    if (Vanity.UrlPattern == Vanity.UrlType.ArticleCategoryCombination)
    {
        GrdRewrite.Columns[2].Visible = false;
        GrdRewrite.Columns[3].Visible = GrdRewrite.Columns[5].Visible = GrdRewrite.Columns[6].Visible = true;
    }
    else if (Vanity.UrlPattern == Vanity.UrlType.ArticleOnly)
    {
        GrdRewrite.Columns[5].Visible = true;
        GrdRewrite.Columns[2].Visible = GrdRewrite.Columns[3].Visible = GrdRewrite.Columns[6].Visible = false;
    }
    else if (Vanity.UrlPattern == Vanity.UrlType.Normal)
    {
        GrdRewrite.Columns[2].Visible = true;
        GrdRewrite.Columns[3].Visible = GrdRewrite.Columns[5].Visible = GrdRewrite.Columns[6].Visible = false;
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    pnlAdmin.Visible = (objVanity.UserName == "host");

    if (objVanity.UserName == "host")
        Enable();
    else
        FieldsOpenForEditors(objVanity.SiteSupportUrlFormat);

    if (!IsPostBack)
    {
        Vanity.GenerateListFromEnums(drpAdminUrlType);
        if (objVanity.UserName == "host")
            Vanity.UrlPattern = Vanity.UrlType.ArticleOnly;
        else
            Vanity.UrlPattern = objVanity.SiteSupportUrlFormat;

        BindRewrite();
    }
}

ポストバック全体で列挙型の値を保持する方法を誰か教えてもらえますか

ビューステートはオプションになる可能性があると思いますが、列挙値を保存し、列挙型にキャストされた文字列値を復元する方法についての手がかりがありません。

4

1 に答える 1

8

ポスト バック間で値を保持する場合は、それをセッション、キャッシュ、またはビューステートに保存する必要があります。

あなたの場合、ViewState が好ましい選択になる可能性があります。

public UrlType UrlPattern
{
    get
    {
        if (ViewState["UrlPattern"] != null)
            return (UrlType)Enum.Parse(typeof(UrlType), ViewState["UrlPattern"].ToString());
        return UrlType.Normal; // Default value
    }
    set
    {
        ViewState["UrlPattern"] = value;
    }
}
于 2013-09-25T17:53:44.337 に答える