2015-04-23 56 views
0

我对C#很陌生,所以可能有一个非常简单的答案,这只是我的禁忌,它阻止了我获取它。使用隐藏字段变量时C#字段初始值设定错误

我试图从一个URL中提取一个参数值,然后将它传递给代码后面的查询字符串。

我没有问题获取参数值并将其传递给隐藏字段(这是在jQuery/HTML上的.aspx页面中完成的),但是当我尝试在后面的代码中使用它的值'URLVariable'始终得到'字段初始值设定项不能引用非静态字段,方法或属性'P1''错误

使P1静态使错误消失,但意味着当页面重新加载时值不会改变,这真的是我想解决的问题。我很确定这是我没有正确地做构造函数,但我看不到我错了什么。

感谢您提前提供任何帮助,代码如下。

public partial class SqlDat : System.Web.UI.Page 
{ 
public string P1; 

public SqlDat() 
{ (new SqlDat()).P1 = URLVariable.ToString(); } 

public string tb1text = "SELECT Stuff FROM Somewhere WHERE Something= "+SqlDat.P1;//+ HttpUtility.ParseQueryString(BaseUrl.Query).Get("Tim"); 

} 
+1

显示其余代码。上面的代码在你的课堂上出现在哪里? –

+1

您没有发布这些字段和SqlDat()方法所在的类定义,请更新。 – helb

+0

'公共字符串tb1text'行将'P1'看作是一个静态字段('TypeName.Field')。在为'P1'赋值后,只需在'SqlDat'构造函数内将'tb1text'的值赋值给'SqlDat'构造函数。 –

回答

1

我猜你的类如下所示:

public class SqlDat 
{ 
    public string P1; 

    public SqlDat() 
    { 
     P1 = URLVariable.ToString(); 
    } 

    public string tb1text = "SELECT Stuff FROM Somewhere WHERE Something = "+SqlDat.P1;//+ HttpUtility.ParseQueryString(BaseUrl.Query).Get("Tim"); 
} 

这是行不通的。首先并不是因为SqlDat.P1是指类型SqlDat上的静态成员,而P1不是,所以您正在寻找this.P1或简单地P1

如果您想引用其他成员的初始化,特别是所述构件在构造函数初始化,然后你需要设置它在构造函数中:

public class SqlDat 
{ 
    public string P1 { get; set; } 
    public string tb1text { get; set; 

    public SqlDat() 
    { 
     P1 = URLVariable.ToString(); 
     tb1text = "SELECT Stuff FROM Somewhere WHERE Something = " + P1; 
    } 
} 

然后你就可以让P1tb1text也属性({ get; set; })。

您也可能想重新考虑您的命名以及是否手动创建SQL字符串(了解SQL注入),使用ORM而不是自己查询数据库而不使用静态(URLVariable来自哪里?)。

+0

你在SqlDat.P1中仍然有一个静态引用 - 只需要是P1。 –

+0

我想这就是答案,谢谢你们。感谢CodeCaster,我也对此表示赞赏。 – Thrasymakus

0

您正试图以静态成员的身份访问此字段,事实并非如此。相反,您需要创建一个SqlDat的对象并从那里使用P1。简单地:

(new SqlDat()).P1 
0

你试图访问一个静态属性,并在你的构造函数中创建一个新的实例。以下更改应起作用:

public partial class SqlDat : System.Web.UI.Page 
{ 
public string P1; 

public SqlDat() 
{ P1 = URLVariable.ToString(); } 

public string tb1text = "SELECT Stuff FROM Somewhere WHERE Something= "+P1;//+ HttpUtility.ParseQueryString(BaseUrl.Query).Get("Tim"); 

}