【问题标题】:C# field initializer error when using a hidden field variable使用隐藏字段变量时的 C# 字段初始化程序错误
【发布时间】:2015-04-23 10:58:56
【问题描述】:

我对 C# 很陌生,所以可能有一个非常简单的答案,只是我的菜鸟阻止了我。

我正在尝试从 URL 中提取参数值,然后将其传递给后面代码中的查询字符串。

我可以毫无问题地获取参数值并将其传递给隐藏字段(这是在 .aspx 页面上的 jQuery/HTML 中完成的),但是当我尝试在后面的代码中使用它的值“URLVariable”时,我始终如一get 'A field initializer cannot reference the non-static field, method, or property 'P1'' error

将 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()方法所在的类定义。请更新。
  • public string tb1text 行引用 P1,就好像它是一个静态字段 (TypeName.Field)。在为P1 赋值之后,只需在SqlDat 构造函数中赋值tb1text

标签: c# hiddenfield


【解决方案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 来自哪里?)。

【讨论】:

  • 您仍然在 SqlDat.P1 中有一个静态引用 - 只需为 P1。
  • 我想这就是答案,谢谢大家。也感谢我应该做的建议,感谢 CodeCaster。
【解决方案2】:

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

(new SqlDat()).P1

【讨论】:

    【解决方案3】:

    您尝试访问静态属性,并且在构造函数中创建了一个新实例。以下更改应该有效:

    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");
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2011-12-20
      • 2012-06-08
      • 2011-02-28
      • 1970-01-01
      • 2021-09-25
      相关资源
      最近更新 更多