首页 新闻 会员 周边 捐助

给命名空间中的static变量赋值后,如何解决其赋值后持久化的问题?

0
悬赏园豆:50 [已关闭问题]

在App_Code目录下有这样一个命名空间:

using System;
using System.Text;
using System.Text.RegularExpressions;

namespace FUN
{
   
public class fun
    {
       
public static string strBaseTarget = "";

        //输出html头部

       
public static void Header()
        {
            //<html><head>.....略
           
if (strBaseTarget.Length > 0)
                System.Web.HttpContext.Current.Response.Write(
"<base target=\""+ strBaseTarget +"\" />");
        }
    }
}

 

现在网站根目录有4个文件:list.aspx; list.aspx.cs; view.aspx; view.aspx.cs,它们都会using FUN,并且调用fun.Header(),现在的问题是:

我在list.aspx.cs中给strBaseTarget赋值,fun.strBaseTarget = "right",然后在list.aspx中调用fun.Header(),运行后输出<base target="right" />,这里是OK的。
但是在view.aspx中直接调用fun.Header()时发现还是会输出<base target="right" />,看了一下strBaseTarget的值还是"right",也就是说在strBaseTarget在list.aspx.cs文件中赋值一次后,在其他文件中,这个变量就一直处于已赋值状态了。

我在CSDN上问了这个问题,大侠回复说是因为静态变量的原因,应该使用非静态变量,调用的时候应该这样写:
FUN.fun.strBaseTarget sbt = new FUN.fun.strBaseTarget();
sbt.strBaseTarget = "right";

问题是去掉static属性后,FUN命名空间内的Header()都不能调用strBaseTarget,提示:
非静态的字段、方法或属性“FUN.fun.strBaseTarget”要求对象引用

请教这个问题应该如何解决?主要还是在实现这样的功能时,大家都是怎么做的?像上面那样写一大串代码来引用这个变量可能不是最好的方式吧?

rqrq的主页 rqrq | 初学一级 | 园豆:95
提问于:2009-12-19 15:29
< >
分享
其他回答(1)
0

不用static ,

采用virtual 先默认一个值

需要修改的地方再OverRide一次

邀月 | 园豆:25475 (高人七级) | 2009-12-19 15:44
0

不要写静态变量,把target的值作为一个参数传递即可

例如在list.aspx可以调用fun.Header("right")

在其他页面中可以调用fun.Header("_top");

玉开 | 园豆:8822 (大侠五级) | 2009-12-19 20:59
这儿不适合使用静态变量。如果你非要用静态变量,需要在每次使用前给静态变量赋予新值。而这还不如给方法传递正确的参数合适。
支持(0) 反对(0) 玉开 | 园豆:8822 (大侠五级) | 2009-12-19 21:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册