【发布时间】:2014-10-27 12:08:08
【问题描述】:
我需要知道这是否可行,我有一个向导,当我进入第 5 步时,我需要将按钮从下一个更改为完成按钮,因为向导的完成步骤没有显示这些步骤,我需要它显示,所以我想办法做事,但我需要一个按钮在进入第 5 步时变为可见,但问题是它必须在 activeStepChanged 上完成(我认为)。
代码如下:
protected void wizard1_ActiveStepChanged ( object sender, EventArgs e ) {
((Button)(wizard1.FindControl("StepNavigationTemplate$btnNext"))).Visible = true;
((Button)(wizard1.FindControl("StepNavigationTemplate$btnFinish"))).Visible = false;
switch(wizard1.ActiveStepIndex) {
case 1:
wizard1.MoveTo(WizardStep2);
break;
case 2:
wizard1.MoveTo(WizardStep3);
break;
case 3:
wizard1.MoveTo(WizardStep4);
break;
case 4:
wizard1.MoveTo(WizardStep5);
((Button)(wizard1.FindControl("StartNavigationTemplateContainerID$btnNext"))).Visible = false;
((Button)(wizard1.FindControl("StartNavigationTemplateContainerID$btnFinish"))).Visible = true;
break;
case 5:
wizard1.MoveTo(WizardStep6);
break;
}
}
这可能吗?因为当我运行代码时它说按钮为空,我尝试了其他类似的方法:
protected void wizard1_ActiveStepChanged ( object sender, EventArgs e ) {
Button btnNext = (Button)wizard1.FindControl("btnNext");
Button btnFinish = (Button)wizard1.FindControl("btnFinish");
btnNext.Visible = true;
btnFinish.Visible = false;
switch(wizard1.ActiveStepIndex) {
case 1:
wizard1.MoveTo(WizardStep2);
break;
case 2:
wizard1.MoveTo(WizardStep3);
break;
case 3:
wizard1.MoveTo(WizardStep4);
break;
case 4:
wizard1.MoveTo(WizardStep5);
btnNext.Visible = false;
btnFinish.Visible = true;
break;
case 5:
wizard1.MoveTo(WizardStep6);
break;
}
}
但它总是返回我说按钮为空,有什么方法可以捕捉 ActiveStepChanged 上的按钮?如果不是,我必须使用哪些替代方法才能使其正常工作?
这里是按钮代码:
<StartNavigationTemplate>
<asp:Button ID="StartNextButton" runat="server" CommandName="MoveNext" Text="SEGUINTE" CssClass="wizard-nav-buttons" ValidationGroup="valReg" CausesValidation="true" />
</StartNavigationTemplate>
<StepNavigationTemplate>
<div style="display: table-cell;">
<asp:Button ID="btnPrevious" runat="server" Text="ANTERIOR" CommandName="MovePrevious" CausesValidation="true" CssClass="wizard-nav-buttons prev" />
</div>
<div style="display: table-cell; padding-left: 10px;">
<asp:Button ID="btnNext" runat="server" CommandName="MoveNext" Text="SEGUINTE" CausesValidation="true" CssClass="wizard-nav-buttons" />
</div>
<div style="display: table-cell; padding-left: 10px;">
<asp:Button ID="btnFinish" runat="server" OnClick="wizard1_FinishButtonClick" Text="SUBMETER PROPOSTA" CssClass="wizard-nav-buttons submeterProposta" CausesValidation="true" Visible="false" />
</div>
</StepNavigationTemplate>
<FinishNavigationTemplate></FinishNavigationTemplate>
到目前为止,谢谢。
【问题讨论】:
-
您的第二个示例应该找到控件。您是否在 MasterPage 中?您可以从 CodingHorror 获得一个递归 FindControl,它可以在 MasterPage 中工作。blog.codinghorror.com/recursive-pagefindcontrol
-
我使用的是普通的aspx页面,我在这个项目中没有母版页,我正在制作一个表单提交到数据库,所以它无论如何都不能在母版页上
-
您的完成按钮 ID 是“btnFinishButton”还是“FinishButton”?我敢打赌你的 ID 已关闭。
-
id 是 FinishButton,但它为两个按钮返回 null 值,对于第一个例子,你是对的,id 是关闭的,但它为 btnNext 返回 null
-
您是否尝试过先获取导航模板,然后获取模板内的按钮? (应该是 FindControl("NavigationTemplate").FindControl("ButtonID")?