2012-10-02 21 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

相关问题