文字和ViewState的问题

时间:2009-07-15 20:33:55

标签: c# asp.net

我正在尝试创建一个链接到虚拟主机购物车流程的模块。

第一步应该有一个带有“添加”按钮的文本字段。此按钮检查域的可用性并将其添加到列表中。

这里的目标是基本上显示已验证的域列表并作为无线电控制器给予适当的操作(如果它是免费的则注册,否则转移或直接指向域)。

所以基本上我检查可用性,然后在占位符中添加文字控件。

问题就在于视图状态(当我向前和向后前进时,我失去了对域名做出的选择)。

html:

( ... )
        <asp:MultiView ID="mvFlow" runat="server" ActiveViewIndex="0">
            <asp:View ID="vDomain" runat="server" onactivate="vDomain_Activate">

                <asp:TextBox ID="txtDomain" runat="server" style="margin-bottom: 0px" 
                    Width="254px"></asp:TextBox>
                    &nbsp;<asp:Button ID="domainAdd" runat="server" onclick="domainAdd_Click" 
                    style="height: 26px" Text="Ajouter" />
                &nbsp;<br />
                <br />
                <asp:PlaceHolder ID="phDomainResults" runat="server"></asp:PlaceHolder>
                <br />
                <br />
                <asp:LinkButton ID="lbDomainSkip" runat="server" onclick="lbDomainSkip_Click">Prochaine 
                étape »</asp:LinkButton>

            </asp:View>
( ... )
它背后的基本上是这样的:

lt.Text =

                    "<dl>" +
                        "<dt><strong>" + txtDomain.Text + "</strong> <span style='color:green;'>Le domaine est disponible</span></dt>" +
                        "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='register' /> Register</dd>" +
                        "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='transfert' disabled='disabled' /> Transfert</dd>" +
                        "<dd><input type='radio' name='" + txtDomain.Text.Replace('.', '_') + "_action' value='point' /> Point</dd>" +
                    "</dl>";

必须有可能使事情更合乎逻辑和容易吗?

根据建议我这样做了:

LiteralControl lt = new LiteralControl();
RadioButtonList rl = new RadioButtonList();

lt.Text = "<strong>" + txtDomain.Text + "</strong> <span style='color:green;'>Le domaine est disponible</span>";
rl.Items.Add(new ListItem { Enabled = true, Selected = true, Text = "Enregistrement", Value = "register" });
rl.Items.Add(new ListItem { Enabled = false, Selected = false, Text = "Transfert", Value = "transfert" });
rl.Items.Add(new ListItem { Enabled = true, Selected = false, Text = "Pointer moi même", Value = "point" });
//phDomainResults is a PlaceHolder in the page
phDomainResults.Controls.Add(lt);
phDomainResults.Controls.Add(rl);

似乎没有更多工作......

3 个答案:

答案 0 :(得分:1)

ASP.NET保存视图状态就好了:它保留了文字的内容,就像它应该的那样。但是,文字的内容只是标记(带有单选按钮的<dl>),而不是用户可能对这些按钮所做的事情。

因为您正在动态地将单选按钮添加到HTML中,所以ASP.NET页面并不“了解”它们。

您可以尝试使用RadioButtonList,而不是在Literal控件中吐出单选按钮。

答案 1 :(得分:0)

如果需要使用视图状态,那么你是正确的,你不能使用文字。 (或者更具体地说,你可以,但这将非常麻烦。

您应该动态生成一个asp RadioButtonList元素并将其添加到占位符。您的页面将能够记住viewstate中的RadioButtonList。

答案 2 :(得分:0)

我会将相关信息存储在您的代码中的ViewState集合中,并在每个页面上加载清除占位符值并重新渲染并添加文字,就像您现在一样。这样您就不必担心ASP.Net会保存和不保存的内容。