使用隐藏字段变量时的 C# 字段初始化程序错误
C# field initializer error when using a hidden field variable
我是 C# 的新手,所以对此可能有一个非常简单的答案,只是我的菜鸟阻碍了我的理解。
我正在尝试从 URL 中提取参数值,然后将其传递给代码隐藏中的查询字符串。
我可以毫无问题地获取参数值并将其传递给隐藏字段(这是在 .aspx 页面上的 jQuery/HTML 中完成的),但是当我尝试使用它的值时 '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");
}
您正试图将此字段作为静态成员访问,但事实并非如此。相反,您需要创建一个 SqlDat
的对象并从那里使用 P1。简单地说:
(new SqlDat()).P1
我猜你的 class 看起来像这样:
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;
}
}
那么你可以让P1
和tb1text
也成为属性({ get; set; }
)。
您可能还需要重新考虑您的命名,以及是否手动制作 SQL 字符串(阅读 SQL 注入),使用 ORM 而不是自己查询数据库并且不使用静态( URLVariable
从哪里来?)。
您尝试访问静态 属性,并且在您的构造函数中创建了一个新实例。以下更改应该有效:
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");
}
我是 C# 的新手,所以对此可能有一个非常简单的答案,只是我的菜鸟阻碍了我的理解。
我正在尝试从 URL 中提取参数值,然后将其传递给代码隐藏中的查询字符串。
我可以毫无问题地获取参数值并将其传递给隐藏字段(这是在 .aspx 页面上的 jQuery/HTML 中完成的),但是当我尝试使用它的值时 '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");
}
您正试图将此字段作为静态成员访问,但事实并非如此。相反,您需要创建一个 SqlDat
的对象并从那里使用 P1。简单地说:
(new SqlDat()).P1
我猜你的 class 看起来像这样:
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;
}
}
那么你可以让P1
和tb1text
也成为属性({ get; set; }
)。
您可能还需要重新考虑您的命名,以及是否手动制作 SQL 字符串(阅读 SQL 注入),使用 ORM 而不是自己查询数据库并且不使用静态( URLVariable
从哪里来?)。
您尝试访问静态 属性,并且在您的构造函数中创建了一个新实例。以下更改应该有效:
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");
}