【问题标题】:Why does not the CommandArgument of a button inside a ModalPopupExtender with AsyncFileUpload work?为什么带有 AsyncFileUpload 的 ModalPopupExtender 内的按钮的 CommandArgument 不起作用?
【发布时间】:2018-09-17 17:00:40
【问题描述】:

我一直在尝试找出按钮的 CommandName 不起作用的原因,事实上,尽管将属性与一个值,奇怪的是我不能修改属性并且第一次放置属性CommandName没有问题,但是我不可能修改它的值。

首先,我有一个 ModalPopupExtender 和一个 Panel,它有一系列 TextBox 和一个 AsyncFileUpload 和一系列按钮,有必要记住我正在处理一个 ASPX 表单,MasterPage 的儿子:

<cc1:ModalPopupExtender ID="mpEditUser" runat="server" PopupControlID="pnEditUser" TargetControlID="lbShowEditUser"
    CancelControlID="lbCloseEditUser" BackgroundCssClass="modalBackground">
    <Animations>
        <OnShown>
            <FadeIn Duration="0.40" Fps="30" />
        </OnShown>
        <OnHiding>
            <FadeOut Duration="0.40" Fps="30" />
        </OnHiding>
    </Animations>
</cc1:ModalPopupExtender>

<asp:Label ID="lbShowEditUser" runat="server" Text="" style="display:none;"></asp:Label>
<asp:Label ID="lbCloseEditUser" runat="server" Text="" style="display:none;"></asp:Label>  

<asp:Panel ID="pnEditUser" runat="server" ClientIDMode="Static" tabindex="-1" role="dialog">
    <div class="modal-dialog" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <h4 class="modal-title">
                Modify User
            </h4>
        </div>
        <div class="modal-body">
            <asp:UpdatePanel ID="upEditUser" runat="server">
                <ContentTemplate>

                <p>Message</p>
                <div class="form-group">
                    <label for="txtEditUser">Code</label>
                    <asp:TextBox ID="txtEditUser" runat="server" CssClass="form-control" ClientIDMode="Static" Enabled="false"></asp:TextBox>
                </div>
                <div class="form-group">
                    <label for="txtEditNameUser">Name</label>
                    <asp:TextBox ID="txtEditNameUser" runat="server" CssClass="form-control" ClientIDMode="Static" Enabled="false"></asp:TextBox>
                </div>

                <div class="form-group">
                    <asp:UpdatePanel ID="upX" runat="server">
                        <ContentTemplate>
                        <label class="">CV User</label>
                        <div class="input-group">
                            <label class="input-group-btn">
                                <span class="btn btn-primary">
                                    Upload<cc1:AsyncFileUpload ID="fuCVUser" runat="server" class="form-control" style="display:none;" ClientIDMode="Static" OnUploadedComplete="fuCVUser_UploadedComplete"  />
                                </span>
                            </label>
                            <input type="text" class="form-control" readonly disabled>
                        </div>

                        <span class="help-block">
                            <div class="form-inline">
                                <div class="form-group">
                                    <asp:Button ID="btnDownloadCVUser" runat="server" CssClass="btn btn-default" ClientIDMode="Static" CommandArgument="Test" OnCommand="btnDownloadCVUser_Command" Text="Download" />
                                </div>
                            </div>
                        </span>
                        </ContentTemplate>
                    </asp:UpdatePanel>
                </div>

                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        <div class="modal-footer">
            <asp:UpdatePanel ID="upControlsEditUser" runat="server">
                <ContentTemplate>
                    <asp:Button ID="btnCloseEditUser" runat="server" AutoPostBack="true" CausesValidation="true" Text="Close" class="btn btn-default" data-dismiss="modal" OnClick="btnCloseEditUser_Click" aria-hidden="true" />
                    <asp:Button ID="btnEditParticipant" runat="server" AutoPostBack="true" CausesValidation="true" Text="Update User" class="btn btn-primary" data-dismiss="modal" OnClick="btnEditUser_Click" aria-hidden="true" />
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
    </div>
    </div>
</asp:Panel> 

事件 onCommand:

protected void btnDownloadCVUser_Command(object sender, CommandEventArgs e)
{
   string x = e.CommandArgument; <- (this value is always "")
}

为了避免疑虑,我决定将“btnDownloadCVUser”控件从面板中移出

............
         </asp:UpdatePanel>
        </div>
    </div>
    </div>
</asp:Panel>
<asp:Button ID="btnDownloadCVUser" runat="server" CssClass="btn btn-default" ClientIDMode="Static" CommandArgument="Test" OnCommand="btnDownloadCVUser_Command" Text="Download" /> 

这在 CommandArgument 上成功了,也就是说,我可以在标签上看到它的分配值并设法修改它的值。

我尝试将 UpdatePanel 与 AsyncFileUpload 放在一起,使其包含触发器的“来自组”,但我一直提出同样的问题。这很奇怪,因为我有一个按钮可以做完全相同的事情,但它不在 MomalPopupExtender 中

为什么会这样? ModalPopupExtender 或 AsyncFileUpload 是否与问题有关? “form-group”的层次有关系吗?

到目前为止,我唯一的救生员是使用 ViewState,但我仍然对导致我的问题的原因很感兴趣 :(

更新 01: 我注意到原因似乎是我加载文件的方法(AsyncFileUpload),显然如果我尝试为此更改变量,结果好像我没有,但它允许我上传文件没有问题。有什么解决办法吗?

    private int a = 0;

    protected void fuCVUser_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
    {
       a = 10; < - The value changes to '10' but if I enter the event of another button of the ModalPopupExtender the value is still '0'
    }

【问题讨论】:

    标签: c# asp.net forms button


    【解决方案1】:

    看到这个问题后:

    Persisting variable after AsyncFileUpload call to OnUploadedComplete

    我得出的结论是使用静态全局变量或 Session 就足够了 :)

    显然 AsyncFileUpload 方法适用于静态变量,这可以证明 CommandArgument 的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多