2017-08-03 54 views
0

請幫助我創建控制動態保存在服務器中,並循環它,我的問題是如何將值從服務器傳遞到創建的輸入控件。這裏是我的代碼來生成輸入控件字符串生成器並在頁面加載時在jquery中序列化它。有沒有辦法將ID名稱的字符串名稱轉換爲C#asp.net中的「HtmlInputText」?

public string BuildDefectStringInputGroup() 
{ 
    var jsInputString = new StringBuilder(); 

    // loop to build controls 
    foreach (var area in AreaList) 
    { 
     using (var conn = new SqlConnection(ConStr)) 
     { 
      conn.Open(); 
      var cmd = new SqlCommand(_qryDefect, conn); 
      cmd.Parameters.AddWithValue("@viewname", SqlDbType.VarChar).Value = "SkirtCoat_layout"; 
      cmd.Parameters.AddWithValue("@area", SqlDbType.VarChar).Value = area; 
      var dataReader = cmd.ExecuteReader(); 

      jsInputString.AppendFormat($"<div role='tabpanel' class='tab-pane' id='tab-{area.Replace(" ", string.Empty)}'>"); 

      while (dataReader.Read()) 
      { 
       jsInputString.AppendFormat($"<div class='col-sm-3'>" + 
             "<div class='input-group'>" + 
             "<span class='input-group-btn'>" + 
             $"<button class='btn btn-danger' type='button' data-toggle='tooltip' data-placement='top' title='Click to decrease value' id='minus-{area.Replace(" ", string.Empty)}-{dataReader.GetValue(1).ToString().Replace(" ", string.Empty).Replace("/", string.Empty)}'>-</button>" + 
             $"<input id='btn-{area.Replace(" ", string.Empty)}-{dataReader.GetValue(1).ToString().Replace(" ", string.Empty).Replace("/",string.Empty)}' type='button' class='btn btn-primary' value='{dataReader.GetValue(1).ToString()}'/>" + 
             "</span>" + 
             $"<input type='text' class='form-control' id='text-{area.Replace(" ", string.Empty)}-{dataReader.GetValue(1).ToString().Replace(" ", string.Empty).Replace("/", string.Empty)}' name='name-{area.Replace(" ", string.Empty)}-{dataReader.GetValue(1).ToString().Replace(" ", string.Empty).Replace("/", string.Empty)}' runat='server'/>" + 
             "</div>" + 
             "</div>"); 
      } 

      jsInputString.AppendFormat($"</div>"); 
     } 
    } 
    return jsInputString.ToString(); 
} 

這裏是代碼從服務器

private void GetScrapValue(string dept, string machine, string part, string area, string defectname, int prodid, HtmlInputText inputId) 
{ 
    using (var conn = new SqlConnection(ConStr)) 
    { 
     using (var cmd = new SqlCommand("SetScrapValue",conn)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.Parameters.AddWithValue("@Dept", SqlDbType.VarChar).Value = dept; 
      cmd.Parameters.AddWithValue("@machine", SqlDbType.VarChar).Value = machine; 
      cmd.Parameters.AddWithValue("@part", SqlDbType.VarChar).Value = part; 
      cmd.Parameters.AddWithValue("@defectarea", SqlDbType.VarChar).Value = area; 
      cmd.Parameters.AddWithValue("@defectname", SqlDbType.VarChar).Value = defectname; 
      cmd.Parameters.AddWithValue("@prodid", SqlDbType.Int).Value = prodid; 

      SqlParameter qtyParameter = new SqlParameter() 
      { 
       ParameterName = "@qty", 
       Value = -1, 
       Direction = ParameterDirection.Output 
      }; 
      cmd.Parameters.Add(qtyParameter); 

      conn.Open(); 
      cmd.ExecuteNonQuery(); 

      inputId.Value = cmd.Parameters["@qty"].Value.ToString(); // this is the problem 
     } 
    } 
} 

最後我經歷了所有的控制需要循環獲取值,並從服務器設置的值,但我可以將字符串「ID名稱」到「htmlInputText」

private void SetScrapRecords() 
{ 
    foreach (var area in AreaList) 
    { 
     using (var conn = new SqlConnection(ConStr)) 
     { 
      conn.Open(); 
      var cmd = new SqlCommand(_qryDefect, conn); 
      cmd.Parameters.AddWithValue("@viewname", SqlDbType.VarChar).Value = "SkirtCoat_layout"; 
      cmd.Parameters.AddWithValue("@area", SqlDbType.VarChar).Value = area; 

      var dataReader = cmd.ExecuteReader(); 

      while (dataReader.Read()) 
      { 
       var idName = Request.Form[$"text-{area.Replace(" ", string.Empty)}-{dataReader.GetValue(1).ToString().Replace(" ", string.Empty).Replace("/", string.Empty)}"]; // this where generate the ID name from all the controls generated in the page 

       HtmlInputText inputName = HtmlInputText(idName); // this is my problem i dont know how to convert the "string" property to a "HtmlInputText" 

       GetScrapValue("Skirt Coat", "Skirt Coat 4","81310", area, dataReader.GetValue(1).ToString(),1,) // this is the method to grab values but I can'y convert the ID name to a htmlinput prop... 

      } 
     } 
    } 
} 

所有幫助將非常感謝你!

+0

的方法爲什麼不使用Repeater並在ItemDataBound事件中分配值? – hardkoded

+0

你不能轉換的意思是什麼? HtmlInputText構造函數接受一個字符串,並且你做了什麼,那麼你在這裏得到的錯誤或確切的問題是什麼? –

+0

你好,當我嘗試它給我的錯誤: 錯誤\t CS1955 \t非調用成員'HtmlInputText'不能像方法一樣使用。 – Aevi

回答

1

只需更換線

HtmlInputText inputName = HtmlInputText(idName); 

與後續的一個

HtmlInputText inputName = new HtmlInputText(idName); 

運營商「新」說,你要調用類型的構造函數的compilator。現在它嘗試調用名稱爲

+0

謝謝!這就是我想念的東西! – Aevi

相關問題