簡體   English   中英

重復輸入vb.net

[英]Repeating inputs vb.net

我正在vb.NET中編寫食譜書,但是在PHP中有背景知識。 我正在嘗試建立功能,以便在保存之前將多種成分添加到配方中。

在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。 任何人都可以向我指出正確的方向或提供代碼示例。

附帶一提,我的下一個任務是允許用戶上傳多個圖像。 它將具有幾乎相同的功能,但是只要將文件附加到現有輸入,就會添加一個新的文件輸入。

如果您不嘗試引起回發,則可以將該按鈕作為html按鈕進行操作,也可以將該按鈕和轉發器放在更新面板中。 這將導致部分回發。 這可能是更好的選擇,因為我認為您不能以其他方式更新asp:repeater。

正如Titopo所說,我建議您使用列表存儲ID,也可以使用數據集在Viewstate中存儲ID和文本值。

在按鈕上單擊,您可以執行以下操作...

        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

這將存儲每種成分的ID和文本。 如果在更新面板中具有此功能,則它將順利進行,並且僅使用按鈕,文本框和轉發器加載該部分。

ASP:Button將始終導致回發。 我建議您在按下按鈕時存儲每種成分,但是,如果要將所有成分都發送為POST,則可以使用ViewState存儲成分列表。

Page_Load事件上:

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

並在AddButton OnClick事件中:

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

之后,您可以使用For Each語句提取所有成分,形成字符串並將其作為POST變量發送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM