2012-10-02 23 views
2

我是新來的Asp.net和網站建設,但我從Webmatrix網頁開始,我實際上在我的網站上進步很大。 但我現在卡在一塊剃鬚刀代碼。我收到錯誤: 未將對象引用設置爲對象的實例。 在行: 的foreach(在Page.Controls控制C1)未將對象引用設置爲對象的實例。 - 控件集合

@{ 
    var db = Database.Open("DOM Coins"); 
    var codigo_campo_ID_unico=0; 
    var valor_BC=0; 


    if(IsPost){ 

     foreach(Control c1 in Page.Controls){ 
      foreach(Control c in c1.Controls){ 
      if (c.GetType().ToString() == "System.Web.UI.WebControls.TextBox"){ 
       if (c.ID=="BC_8"){ 
        if (c.ID.Substring(0,2)=="BC"){ 
         codigo_campo_ID_unico=int.Parse(c.ID.Substring(3,c.ID.Length-3)); 
         valor_BC=int.Parse(Request[c.ID]); 


         db.Execute("UPDATE Coleccao SET [email protected]_BC WHERE [email protected]_campo_ID_unico"); 
        } 
       } 
      } 
      } 
     } 
    } 

} 

德的原因,我想這樣做,是因爲我創建文本框dinamically,每一個具有不同的ID,我想遍歷所有這些並將數據插入數據庫。

任何幫助將是apreciated。

在此先感謝, Dinis。

+0

發佈示例如何將控件添加到頁面? – eridanix

+0

不幸的是Razor不使用Web控件。控件作爲一個概念適用於WebForms,並且「Page」對象僅在WebForm上可用。它會給你這個錯誤,因爲你試圖訪問null頁面對象上的'Controls'屬性 – tristankoffee

+0

這是這樣的: @foreach(db.Query(「SELECT * FROM table1」中的行){ < input type =「TextBox」ID =「@ row.ID_unico」> @ row.BC } – D1N15

回答

0

下面的代碼創建一個表單文本字段的可變數目,並讀取其內容將其存儲到一個列表。

@{ 
    var num = 3; // number of text fields to create 
    List<string> nText = new List<string>(); 
    if (IsPost) 
    { 
     for (int i = 0; i < num; i++) 
     { 
      var name = "txt" + i.ToString(); 
      nText.Add(Request.Form[name]); 
     } 
    } 
} 

<!DOCTYPE html> 

<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title></title> 
    </head> 
    <body> 
     <form method="post"> 
      @for (int i = 0; i < num; i++) 
      { 
       var name = "txt" + i.ToString(); 
       <p>@name 
       <input type="text" name="@name" /> 
       </p> 
      } 
      <input type="submit" /> 
     </form> 
    </body> 
</html> 

只需稍作更改,您可以將文本字段值插入表記錄中。

+0

謝謝。我沒有在輸入字段中使用「名稱」,所以request.form沒有返回任何內容。現在它可以工作。 – D1N15

0

在我看來,你是使用asp.net網頁,而不是MVC,是否正確?您想渲染:

<input type="text" id="xxxx" /> 

作爲標記,不直接添加元素。然後,在此之上,檢查該ID的通過查詢表格收集進入響應:

@{ 
    var ids = Request.Form.Keys.Where(i => i.StartsWith("BC")); 
    //can process values here and store in dictionary, or process at render time 
} 

//Rerender textboxes - would have to base on ID's posted, or query again from DB 
+0

對不起,我想我沒有解釋清楚。我有一個提交按鈕和幾個動態創建的文本框的表單。我需要的只是在用戶按下提交按鈕時在數據庫中插入/更新文本框文本。爲此,我需要遍歷頁面中的所有文本框,其數量我不知道。 – D1N15

+0

@ D1N15你不能迭代文本框; Razor中沒有這樣的文本框控件。你所做的是遍歷Form集合。表單集合具有鍵(文本框的ID)並使用Request.Form.Get(「」)來獲取值。 Razor與web表單完全不同。 –

+0

好的。你能告訴我怎麼做嗎?因爲你提到的「where」方法沒有被識別,所以我無法真正理解如何實現我所需要的,使用它。謝謝 – D1N15

相關問題