在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”要求对象引用
请教这个问题应该如何解决?主要还是在实现这样的功能时,大家都是怎么做的?像上面那样写一大串代码来引用这个变量可能不是最好的方式吧?
不用static ,
采用virtual 先默认一个值
需要修改的地方再OverRide一次
不要写静态变量,把target的值作为一个参数传递即可
例如在list.aspx可以调用fun.Header("right")
在其他页面中可以调用fun.Header("_top");