使用隐藏字段变量时C#字段初始化程序错误

时间:2015-04-23 10:58:57

标签: c# hiddenfield

我对C#非常陌生,所以对此可能只是一个非常简单的答案,只是我的noobness阻止我得到它。

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

获取参数值并将其传递给隐藏字段(在.aspx页面上以jQuery / HTML格式完成),我没有问题,但是当我尝试使用它时#s; s价值' 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");

}

3 个答案:

答案 0 :(得分: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来自何处? )。

答案 1 :(得分:0)

您尝试将此字段作为静态成员访问,而不是。相反,您需要创建SqlDat的对象并从那里使用P1。简单地:

(new SqlDat()).P1

答案 2 :(得分: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");

}
相关问题