2012-01-11 16 views
0

我有一個ASP.NET嚮導步驟包括基於什麼在先前步驟中選擇的用戶控制,而不管顯示作爲對照集合的一部分的ASP.NET嚮導步驟:控制有條件地加入到該條件

 <asp:WizardStep ID ="WizardStep3" runat="server" Title="Step 3"> 
      <%switch (someFlag) 
       { 
        case ("value a"): 
      %> 
         <wizStep:Step3_ReportA ID="Step3_ReportA" runat="server" /> 
         break;               
        case ("value b"): 
      %> 
         <wizStep:Step3_ReportB ID="Step3_ReportB" runat="server" /> 
      <% 
         break; 
      } %> 
     </asp:WizardStep> 

(注:這只是僞標記,所以不要擔心語法)

這種做法似乎工作好,避免了動態添加控件到頁面的問題,並回傳頭痛之間的所有的堅持帶來的。

不過,我也有下面的代碼是用來驗證什麼,在步驟中選擇:

protected void wizReportWizard_NextButtonClick(object sender, WizardNavigationEventArgs e) 
{ 
    int stepId = e.CurrentStepIndex; 
    var wizardStepControls = wizReportWizard.WizardSteps[stepId].Controls.OfType<BaseWizardStep>().ToList(); 

    foreach (var wizardStepControl in wizardStepControls) 
    { 
     if (wizardStepControl.IsStepValid()) 
     { 
      wizardStepControl.DoSomething(); 
     } 
     else 
     { 
      e.Cancel = true; 
      return; 
     } 
    } 
} 

什麼我發現令人困惑的是,wizardStepControls包含兩個步驟控制Step3_ReportAStep3_ReportB ) - 不僅僅是由於switch聲明而包含的控件。當然,當頁面呈現時,只輸出一個控件。

那麼爲什麼switch語句中的所有控件都被報告屬於嚮導步驟控件集合,以及如何找到哪個是switch語句實際選擇的那個?

在此先感謝!

回答

0

someFlag似乎是一個布爾值,你正在比較字符串......此外,我看不到任何這個「someFlag」變量的聲明,它是布爾值嗎?或者它是一個字符串?

+0

嗨穆罕默德。這只是僞代碼。實際的switch語句要複雜得多,並且基於枚舉。因此,我不認爲這是一個語法問題,因爲頁面呈現很好。 – 2012-01-11 11:40:09

+0

改爲使用 Response.Write(@「」); – Rizwan 2012-01-12 08:13:45

+0

這隻會將文本「」添加到輸出HTML中,因此不起作用。無論如何,感謝您的建議穆罕默德,但是我現在已經放棄了添加動態控制,只是處理相關的頭痛! – 2012-01-12 09:55:06