2009-02-18 50 views
2

我在表单上有三个单选按钮--A,B,C。这些选择中的每一个都会填充特定于该选项的数据的下拉列表。当表单加载时,我设置选项A进行检查(作为默认)。默认单选按钮不触发UpdateControl回发

当我选择按钮B或C时,AsyncPostBack触发正常,下拉列表被填充。但是,随后从B或C中选择A不会触发事件。

我怀疑是因为当窗体加载时检查了A,浏览器没有看到任何“更改”来提升事件。

那么可以做些什么来使默认的A按钮识别它正在从B或C改变,以提高回发?

我已经尝试在页面初始化加载(即IsPostBack为False)中设置按钮A的选中状态,并在html中设置单选按钮的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

单选按钮是一组的组成部分吗? – BenB 2009-02-18 03:46:34

+0

是的,他们都有相同的GroupName。 – Bill 2009-02-18 03:52:29

+0

你可以发布你的Page_Load代码吗? – BenB 2009-02-18 03:55:08

回答

0

你是否偶然在你的代码中处理viewstate呢?如果是这样,那么你需要处理它的AJAX版本,因为在AJAX样式页面上,viewstate经常会丢失。尝试将按钮放入更新面板中,并查看面板是否将更新模式设置为条件时,是否获得相同的行为。如果你这么做,不要担心回发触发器。

异步触发器仅适用于更新面板中的项目。在面板外的任何项目都会按设计完成回发。

<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> 
1

我猜你需要需要检查,如果该页面是一个在您的负载事件中回发:

protected void Form_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostback) 
    { 
     // Set radiobutton A... 
    } 
} 
1

我们有同样的问题,似乎你必须将单选按钮的其他“checked”属性设置为“false”。 所以,请加线

radCD.Checked = False 
radDVD.Checked = False 
5

我有同样的问题,并寻找了几个小时的答案。这似乎与ViewState或任何类似的东西没有任何关系,但是与使用预先检查的RadioButton作为Async PostBack触发器的某种不兼容性。 我发现的工作非常简单,并立即开展工作;而不是在服务器端的加价或myRadioButton.Checked使用checked=true,我做了以下内容:

不设置马克行动的属性,并添加这对Page_Load事件:

if (!IsPostBack) 
{ 
    MyRadioButton.InputAttributes["checked"] = "true"; 
    ... 
} 

我希望这可以帮助和节省一些人头发拉:) :)

0

哇,我从来没有想过可能是错误。节省了许多小时的挫折。

谢谢胡安经历了car Microsoft的微软问题,并找到了其余的解决方案。