2013-03-25 62 views
1

我正在使用ASP.NET Web窗體,並且遇到了如何處理狀態的問題。在ASP.NET web窗體中添加對象列表的界面

我正在添加新產品,並且產品有不同的變化。每種變化都有幾個獨特的特徵,例如:價格,購買價格,變化類型,變化值。

在UI中,我希望能夠添加變體列表。當我添加了有關產品的X變體和其他信息時,我想提交整個表單,然後開始執行「添加到數據庫」部分。

解釋具有圖像:

好了,現在用的圖像。用戶爲該變體添加一個新名稱,單擊「添加」,然後將其添加到當前變體列表框控件。當點擊「當前變化」中的變化時,我可以填寫變化信息並保存。

當我完成所有變化後,我可以提交表單。

enter image description here

現在,我的問題

如果我使用了電流的變化的AutoPostBack,它使回傳,一切都因爲狀態的遺忘。使用標準的ASP.NET Web表單,我找不到存儲這些列表的方法。

我真正需要的是從Windows窗體中包含對象的ListBox。但是,好運氣和一個無狀態的Web ;-)

解決方案,我能想到關

  • 在每一次點擊,改變被保存到被提交表單

  • 時使用的臨時會話

    在每一次點擊,我救不了的東西到數據庫暫時

我想要的一種解決方案

一個很好的解決方案是一些jQuery魔術,我可以動態地創建所需的所有行而不需要回發。然後當我完成時,我可以迭代所有控件,並將其存儲在數據庫中。

我想這是一個正常的問題,有人可以發送一個明顯的鏈接,或者告訴我它是多麼容易修復它! :-)

哦,是的,最後一件事,不要讓我下地獄,因爲我仍然有Web窗體項目。

+1

你」已經非常多地列出了你的選項 - 會話或數據庫。我不認爲客戶端解決方案會因爲您的複雜性而將其切入此處 - 您需要保存每個變體的信息,這可能會在添加後發生。這對於Javascript/jQuery來說不是不可能的,但它可能會涉及到,我想你會想要更多的庫(用於數據綁定等)來構建一個強大的解決方案。 (您還必須將Javascript對象拉入服務器代碼中,也許是JSON?)您的最終選擇是.NET MVC。 :P – 2013-03-25 17:11:34

+0

不要擔心由於Web窗體而不得不下地獄。它已經存在了超過10年..它非常成熟。不要讓別人告訴你,否則 – 2013-03-25 18:20:25

回答

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 ?? ""; 

    } 
+0

並且謝謝我最終如何實現它。非常感謝你的努力 - 意味着很多:-) – 2013-03-25 19:23:45

相關問題