-2

我已经动态加载了一个 -user 控件,它有一些提交按钮代码,用户控件在运行时成功注册,但不要在按钮单击时触发它的提交按钮事件,我缺少什么会有人告诉我吗?

看到这里是我的代码

 switch (ContentTypeID)
        {
            case 1:
                myCtrl = Page.LoadControl("~/Controls/DocumentSpreadSheet.ascx");

                if (myCtrl != null)
                {
                    ((Controls_DocumentSpreadSheet)myCtrl).ddlList = int.Parse(ddlList.SelectedValue);
                    pnlDetails.Controls.Add(myCtrl);
                }
                break;
            case 2:

现在在运行时注册的用户控件有一些按钮,它有以下事件

 protected void btnSave_Click(object sender, EventArgs e)
    {
        if (checkRequiredFields(true) == true)
        {
            saveContentDetails();
            btnCancel_Click(null, null);
            //   loadSummaryGrid(true);
        }
        else
        {
            showMessageBox("Invalid data; please correct all errors.");
        }

    }

这个事件没有被触发,我已经附加了断点并观察了它。

渲染标记

<div id="MainContent_ctl00_divButtons">
    <table cellspacing="0" cellpadding="0" border="0" style="width: 97%;
        margin: 10px;" id="Table3">
        <tbody><tr>
            <td align="center" colspan="4">
                <input type="image" src="../images/submit_btn.png" id="MainContent_ctl00_btnInsert" name="ctl00$MainContent$ctl00$btnInsert">
                &nbsp;
                <input type="image" src="../images/cancel-btn.png" id="MainContent_ctl00_btnCancel" name="ctl00$MainContent$ctl00$btnCancel">
                &nbsp;
            </td>
        </tr>
        <tr>
            <td>

            </td>
        </tr>
    </tbody></table>
</div>

实际加价    

4

1 回答 1

0

简单的答案:您添加控件为时已晚。

如果您想接受按钮单击,则应在 loadComplete 之前添加您的用户控件。理想情况下,您应该添加它Init,或者如果它取决于某些输入,请将其添加到Load事件中。

如果您将控件添加到按钮单击事件之类的东西上,它会呈现得很好。但是您不会在该控件上收到任何事件。

您的事件目标(在 html 中的隐藏元素中设置)在 LoadComplete 之后进行评估。如果在评估时您的控件不存在,它将不会收到该事件。

你要明白的是,grid 的 ItemCommand 事件触发了一次,它不会在下一次触发PostBack。您需要记住您已经添加了该控件,并PostBack再次添加它,直到您需要它在那里。最好记住这一点的地方是ViewState.

您应该设置一个变量ViewState来指示您当前正在显示该特定控件并使用该变量将控件添加到Load. 你不能这样做,Init因为 ViewState 在 Init 上不可用。

于 2012-06-26T11:03:43.263 回答