使用隐藏字段变量时的 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;
    }
}

那么你可以让P1tb1text也成为属性({ 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");

}