【问题标题】:asp.net wizard activestepchange next button change validation groupasp.net 向导 activestepchange 下一步按钮更改验证组
【发布时间】: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")?

标签: c# asp.net .net


【解决方案1】:

我找到了解决方案,实际上它非常简单,因为我试图在 ActiveStepIndex 被定义(预渲染)之前调用按钮,所以找不到它(正常,因为它甚至没有被创建),所以经过几次尝试和 1 早上的搜索和测试,我尝试将它放在 switch 中的一个案例之后并找到它,所以对于那些可能有这个困难的人,这里是功能代码:

protected void wizard1_ActiveStepChanged ( object sender, EventArgs e ) {
    Button btnNext , btnFinish;
    switch(wizard1.ActiveStepIndex) {
        case 1:
            btnNext = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnNext");
            btnFinish = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnFinish");
            btnNext.ValidationGroup = "valAutUniq";
            btnNext.Visible = true;
            btnFinish.Visible = false;
            wizard1.MoveTo(WizardStep2);
            break;
        case 2:
            btnNext = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnNext");
            btnFinish = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnFinish");
            btnNext.ValidationGroup = "valAutUniq";
            btnNext.Visible = true;
            btnFinish.Visible = false;
            wizard1.MoveTo(WizardStep3);
            break;
        case 3:
            btnNext = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnNext");
            btnFinish = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnFinish");
            btnNext.ValidationGroup = "valFormPag";
            btnNext.Visible = true;
            btnFinish.Visible = false;
            wizard1.MoveTo(WizardStep4);
            break;
        case 4:
            btnNext = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnNext");
            btnFinish = (Button)wizard1.FindControl("StepNavigationTemplateContainerID").FindControl("btnFinish");
            btnNext.ValidationGroup = null;
            btnNext.Visible = false;
            btnFinish.Visible = true;
            wizard1.MoveTo(WizardStep5);
            break;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 2017-08-03
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    相关资源
    最近更新 更多