我在表单上有三个单选按钮--A,B,C。这些选项中的每一个都会使用特定于该选项的数据填充下拉列表。当表单加载时,我设置选项A进行检查(作为默认值)。
当我选择按钮B或C时,AsyncPostBack触发正常并填充下拉列表。但是,随后从B或C中选择A不会触发事件。
我怀疑因为在加载表单时检查了A,浏览器没有看到任何“更改”来引发事件。
那么可以做些什么来启用默认的A按钮来识别它是从B或C更改以提高回发?
我已经尝试在仅在页面的初始加载中设置代码中的按钮A的检查状态(即IsPostBack为False),并且在html中设置radiobutton的checked属性,具有相同的结果。如果我没有默认单选按钮,则功能按预期工作,除了我没有在页面首次加载时默认的单选按钮和下拉列表。
html ...
<asp:RadioButton ID="radBook" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="Book" />
<asp:RadioButton ID="radCD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="CD" />
<asp:RadioButton ID="radDVD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="DVD" />
<asp:UpdatePanel ID="pnlTasks" runat="server" UpdateMode="Conditional" RenderMode="Inline">
<ContentTemplate>
<asp:DropDownList ID="dropShippingSize" runat="server" CssClass="dropdownMandatory"></asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="radBook" />
<asp:AsyncPostBackTrigger ControlID="radCD" />
<asp:AsyncPostBackTrigger ControlID="radDVD" />
</Triggers>
</asp:UpdatePanel>
背后的代码......
Sub Page_Load
If Not Me.IsPostBack Then
radBook.Checked = True
End If
End Sub
Private Sub rad_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles radBook.CheckedChanged, radCD.CheckedChanged, radDVD.CheckedChanged
zLoadShippingSizeDropdown()
End Sub
答案 0 :(得分:5)
我遇到了同样的问题并且需要几个小时寻找答案。这似乎与ViewState或类似的东西没有任何关系,但是使用预先检查的RadioButton作为Async PostBack的触发器有某种不兼容性。
我找到的工作非常简单,并且可以立即使用;而不是在标记上使用checked=true
或在服务器端使用myRadioButton.Checked
,我执行了以下操作:
未在标记上设置属性并在Page_Load
事件中添加此内容:
if (!IsPostBack)
{
MyRadioButton.InputAttributes["checked"] = "true";
...
}
我希望这有助于节省一些人的头发时间:)
答案 1 :(得分:1)
我猜你需要检查页面是否是你的加载事件中的回发:
protected void Form_Load(object sender, EventArgs e)
{
if (!Page.IsPostback)
{
// Set radiobutton A...
}
}
答案 2 :(得分:1)
我们遇到了同样的问题,似乎你必须将单选按钮的另一个“已选中”属性设置为“false”。 所以请添加行
radCD.Checked = False
radDVD.Checked = False
答案 3 :(得分:0)
您是否偶然也会在您的代码中处理viewstate?如果是这样,那么你需要处理它的AJAX版本,因为viewstate经常会在AJAX样式页面上丢失。尝试将按钮放在更新面板中,如果面板的更新模式设置为条件,请查看是否获得相同的行为。如果你这样做,不要担心回发触发器。
异步触发器仅适用于更新面板内的项目。面板外的任何项目都将按设计完成回发。
<asp:UpdatePanel ID="pnlTasks" runat="server" UpdateMode="Conditional" RenderMode="Inline">
<ContentTemplate>
<asp:RadioButton ID="radBook" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="Book" />
<asp:RadioButton ID="radCD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="CD" /><asp:RadioButton ID="radDVD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="DVD" />
<asp:DropDownList ID="dropShippingSize" runat="server" CssClass="dropdownMandatory">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
答案 4 :(得分:0)
感谢Juan经历了棘手的微软问题并找到了其余的解决方案。