用于在ASP.NET Web表单中添加对象列表的UI

时间:2013-03-25 17:03:02

标签: jquery asp.net webforms postback asp.net-4.5

我正在使用ASP.NET Web Forms,我对如何处理状态有疑问。

我正在添加新产品,产品有不同的变化。每种变体都有几个独特的特征,例如:价格,购买价格,变体类型,变异价值。

在用户界面中,我希望能够添加变体列表。当我添加X变体和有关产品的其他信息时,我想提交整个表单,然后开始添加到数据库部分。

用图片说明:

好的,现在有了一张图片。用户为变体添加新名称,单击“添加”,然后将其添加到当前变体ListBox控件。单击“当前变体”中的变体时,我可以填写有关变体的信息,然后保存。

当我完成所有变体后,我可以提交表单。

enter image description here

现在,我的问题

如果我使用Current变量的AutoPostBack并进行回发,那么一切都会因为状态而被遗忘。使用标准的ASP.NET Web表单,我找不到存储这些列表的方法。

我真正需要的是来自Windows Forms的包含对象的ListBox。但是无国界网的好运; - )

我能想到的解决方案

  • 每次点击,更改都会保存到提交表单时使用的临时会话

  • 每次点击,我都可以暂时将内容保存到数据库中

我想要的一种解决方案

一个很好的解决方案是一些jQuery魔术,我可以动态创建我需要的所有行而无需回发。然后,当我完成后,我可以迭代所有控件,并将其存储在数据库中。

我想这是一个正常的问题,有人可以发送明显的链接,或者告诉我修复它有多容易! : - )

哦,是的,最后一件事,不要让我下地狱,因为我还有Web表单中的项目。

1 个答案:

答案 0 :(得分:1)

这肯定是我认为应该使用ViewState的地方。通常,我反对在Web窗体中使用ViewState。但是,你在这样一个需要“有状态”操作的地方。

使用包含如下表单元素的ASPX:

  New Variation:
  <asp:TextBox runat="server" ID="newName"></asp:TextBox>
  <br />
  <asp:Button runat="server" ID="addName" Text="Add Variant" OnClick="addName_Click" />

  <br />
  <br />
  Current Variations:<br />
  <asp:ListBox runat="server" ID="listOfVariations" Width="200px" 
       AutoPostBack="true" 
       OnSelectedIndexChanged="listOfVariations_SelectedIndexChanged">
  </asp:ListBox>
  <br />
  Feature 1:<br />
  <asp:TextBox runat="server" ID="feature"></asp:TextBox>
  <br />
  <asp:Button runat="server" ID="submit" Text="Add Variation" />

您可以编写代码隐藏,然后将数据移动到ViewState中,以便在页面加载之间记住:

    protected void addName_Click(object sender, EventArgs e)
    {
    listOfVariations.Items.Add(newName.Text);
    ViewState.Add("item_" + newName.Text, new VariantObject{ Name = newName.Text });
    newName.Text = "";

    }

  [Serializable]
  public class VariantObject
  {

    public string Name { get; set; }
    public string Feature1 { get; set; }

  }

  protected void listOfVariations_SelectedIndexChanged(object sender, EventArgs e)
  {

    var v = ViewState["item_" + listOfVariations.SelectedValue] as VariantObject;
    feature.Text = v.Feature1 ?? "";

  }