【问题标题】:Retaining enum values in asp.net在 asp.net 中保留枚举值
【发布时间】:2013-09-25 17:33:34
【问题描述】:

我有一个 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();
    }
}

谁能告诉我如何在回发中保留枚举值

我认为 viewstate 可能是选项,但不知道如何存储枚举值和恢复枚举中的字符串值。

【问题讨论】:

    标签: c# asp.net enums postback viewstate


    【解决方案1】:

    如果你想在回发之间持久化一个值,你需要将它存储在 Session、Cache 或 ViewState 中。

    在您的情况下,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;
        }
    }
    

    【讨论】:

    • 我遇到了问题,问题出在我的 gridview 每当用户单击更新时,我必须更新我的 web.config 以使 UrlRewrite 更改生效,所以无论我更新 web.config,我的session 被擦除并且 Enum 恢复到它的默认值,有没有办法保留它。
    • 如果您触摸 web.config,那么您的应用程序将重新启动。存储数据的唯一方法是在文件或数据库中。
    • .NET 也可以配置为将会话状态存储在数据库中。
    • @Abbas 正如 Mike 所说,您可以首先将数据存储在 SessionState 中。然后将您的应用程序配置为将 SessionState 存储在 StateServer or SQLServer 中。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-02
    • 1970-01-01
    相关资源
    最近更新 更多