【发布时间】:2016-04-27 05:30:38
【问题描述】:
这是我的问题:
- 我使用 ddlType 选择类型
- 我点击 btnAddChoice 添加几个选项
- 我点击 btnSubmit 保存表单
但是当我尝试在 btnSubmit_Click() 中获取 ddlType.SelectedValue 时,它总是回到“选择类型”。
如果我不执行第 2 步,那么它可以正常工作。 据我了解,问题与 ajax 调用(回发)有关,可以通过将 SelectedValue 保存在 Session 或 ViewState 中来解决。
但是我在这个页面上有很多其他控件(例如 ddlType),所以它看起来不是一个优雅的解决方案。我希望框架能够自动将所选值保留在 ViewState 中……知道吗?毕竟,UpdatePanel 的目标不就是只更新面板吗?
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:DropDownList ID="ddlType" runat="server">
<asp:ListItem Text="Select a type" Value=""></asp:ListItem>
<asp:ListItem Text="One" Value="1"></asp:ListItem>
<asp:ListItem Text="Two" Value="2"></asp:ListItem>
<asp:ListItem Text="Three" Value="3"></asp:ListItem>
</asp:DropDownList>
<div>
<strong>Choices</strong>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnAddChoice" EventName="Click" />
</Triggers>
<ContentTemplate>
<ul class="list-unstyled">
<asp:PlaceHolder runat="server" ID="phChoices"></asp:PlaceHolder>
</ul>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="btnAddChoice" runat="server" Text="Add Choice" CausesValidation="false"
OnClick="btnAddChoice_Click" />
</div>
<asp:Button ID="btnSubmit" runat="server" Text="Add question"
OnClick="btnSubmit_Click" />
更新
部分问题是由以下原因引起的:
$('#<%= MainPanel.FindControl("btnAddChoice").ClientID %>').click(function () {
var ddlType = $('#<%= MainPanel.FindControl("ddlType").ClientID %>');
ddlType.attr('disabled', 'disabled');
});
详情请参阅question。 关于其他控件也是空的,原因是"dynamically created controls have to be created each and every post-back"
【问题讨论】:
-
你的
ScriptManager在哪里? -
好的,我已经将它添加到 sn-p 中(尽量保持简短)
-
所以基本上你不想刷新整个页面?对吗?
-
完全正确:当我单击 btnAddChoice 时,我只想更改 UpdatePanel 内容,它似乎工作正常...... ddlType 没有更新(视觉上),但在 ddlType 后面的代码中。 SelectedValue 被重置为默认值(空)
-
hmm 我在 sn-p 的顶部添加了 ScriptManager 标记 .. 有什么遗漏吗?
标签: c# asp.net asp.net-ajax updatepanel