2015-04-23 55 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"); 

}