2012-09-25 81 views
1

我正在處理vb.NET食譜,但在PHP中有一個背景。我正在嘗試構建功能,以便在保存之前將多種配料添加到配方中。重複輸入vb.net

在PHP中,我會有一個自動完成輸入和添加按鈕。當添加按鈕被按下時,成分被添加到成分列表(帶有用於成分ID的隱藏字段),然後當我發佈食譜時,我將簡單循環通過發佈數據並提取這樣的id:

<div id="ingredient-list"> 
<div> 
    <input type="hidden" name="ingredient[0]" value="32" /> 
    <span>Potatoes</span> 
</div> 
</div> 
<div> 
<input type="text" onKeyUp="IngredientSearch(this)" /> 
<div id="food-search-results" class="auto-complete"></div> 
</div> 

foreach($_POST['ingredient'] as $ingredient) { 
recipe.addIngredient($ingredient); 
} 

但是我不確定如何在.NET中完成這樣的任務。目前,我的「添加」按鈕導致頁面回傳(我不想),並將數據添加到asp:repeater。任何人都可以請給我正確的方向或代碼示例。

在旁註中,我的下一個任務是允許用戶上傳多個圖像。當文件附加到現有輸入時,其功能將大致相同,但添加新的文件輸入。

回答

0

ASP:Button總會導致回發。我建議您按下按鈕時存儲每種成分,但是,如果要將所有成分作爲POST發送,則可以使用ViewState來存儲ingredientes列表。

Page_Load事件:

If Not Me.IsPostBack Then 
    ViewState("Ingredients") = New List(Of Integer) 
End If 

而在AddButtonOnClick事件:

Dim list = CType(ViewState("Ingredients"), List(Of Integer) 
list.add(ingredient_id) 
ViewState("Ingredients") = list 

在此之後,你可以使用For Each statment用於提取所有的成分,形成串併發送它作爲POST變量。

+1

也許我匆忙說'ASP:Button'總是會導致回發。看起來你可以使用參數'OnClientClick'來避免這種行爲(例如:'OnclientClick =「return false;」')。 – adripanico

+0

我知道asp:Button導致回傳。我正在嘗試編譯配料列表,而不是在每次添加配料時都預先製作一個後貼。我想建立一份配料清單,然後將它們全部提交回單後。 – James

+0

使用'ViewState',它將是一個回傳,但您將隨時保存成分列表。您還可以使用'OnClientClick'屬性來調用存儲列表的腳本,但我認爲這不是更好的選擇。 – adripanico

1

如果你是不是要進行回傳,你可以做任何的按鈕爲HTML按鈕,或者你可以把按鈕和中繼器的更新面板。這會導致部分回傳。這可能是更好的選擇,因爲我認爲你不能更新asp:repeater。

正如Titopo儘管說,我會建議或者使用清單上存儲的ID或者你可以使用一個數據集到兩個ID和文字值存儲在ViewState。

在您點擊鏈接,你可以做這樣的事情......

 Dim ds As DataSet 
     Dim dt As DataTable 
     If Not ViewState("Ingredients") Is Nothing Then 
      ds = ViewState("Ingredients") 
      dt = ds.Tables(0) 

      Dim dr As DataRow = dt.NewRow 
      dr.Item("IngredientID") = IngredientID' However you would get that. 
      dr.Item("Ingredient") = txtIngredient.Text 
      dt.Rows.Add(dr) 
     Else 
      ds = New DataSet 
      dt = New DataTable 
      dt.Columns.Add(New DataColumn("IngredientID")) 
      dt.Columns.Add(New DataColumn("Ingredient")) 

      Dim dr As DataRow = dt.NewRow 
      dr.Item("IngredientID") = IngredientID' However you would get that. 
      dr.Item("Ingredient") = txtIngredient.Text 
      ds.Tables.Add(dt) 
      ds.Tables(0).Rows.Add(dr) 
     End If 

     Dim dv As DataView = dt.DefaultView 
     dv.Sort = "Ingrediant ASC" 
     repIngrediants.DataSource = dv 
     repIngrediants.DataBind()   ' -- Bind to your repeater here 

     ViewState("Ingredients") = ds 

這將存儲每種成分的標識和文字。如果你在更新面板中有這個功能,它可以順利進行預處理,只用按鈕,文本框和中繼器加載該部分。

+0

UpdatePanel看起來很有趣,但它仍然不是我正在尋找的東西。當然,這可以在沒有任何類型的回傳的情況下完成。應該可以動態改變使用JavaScript的html服務器端,並且仍然可以成功處理服務器端。 – James