2009-02-18 55 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的微軟問題,並找到了其餘的解決方案。