为什么行命令不能正常工作?

时间:2016-06-09 07:07:17

标签: c# asp.net c#-4.0 file-upload rowcommand

我在gridview的ROWCOMMAND中调用了一个下载函数。单击它时它可以正常工作但是如果我在rowcommand中单击(调用)另一个函数则停止工作。它不会抛出异常。我试着调试每一步但没有运气。

为什么?

下载功能:

public void DownloadFile(string FileName)
{
    try
    {
        string filePath = FileName;
        string fullFilePath = Server.MapPath("../../SiteImages/BPA/" + filePath);
        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.AddHeader("Content-Disposition", "attachment; filename=\"" + Path.GetFileName(fullFilePath) + "\"");
        Response.ContentType = ContentType;
        Response.TransmitFile(fullFilePath);
    }

RowCommand:

protected void grdViewUploadedMaterialOther_RowCommand(object sender, GridViewCommandEventArgs e)
{
    try
    {

        if (e.CommandName == "Download")
        {
            mdlImgPreview.Hide();

            string FileName = Convert.ToString(e.CommandArgument);

            DownloadFile(FileName);

            return;
        }

        if (e.CommandName == "View")
        {
            imgPreviewed.ImageUrl = "../../SiteImages/BPA/" + e.CommandArgument.ToString();
            mdlImgPreview.Show();
        }

    }
    catch (Exception ex)
    {
        ResultLabel.ResultLabelAttributes(ex.Message, ProjectUserControls.Enums.ResultLabel_Color.Red);
    }
    finally
    {
        ResultPanel.Controls.Add(ResultLabel);
    }

Rowdatabound:注册按钮

protected void grdViewUploadedMaterialOther_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        try
        {
            LinkButton lb = e.Row.FindControl("btnLinkDownload") as LinkButton;
            RegisterDownloadButton(lb);
        }
        catch (Exception ex)
        {
            ResultLabel.ResultLabelAttributes(ex.Message, ProjectUserControls.Enums.ResultLabel_Color.Red);
        }
        finally
        {
            ResultPanel.Controls.Add(ResultLabel);
        }
    }

注册功能:

public void RegisterDownloadButton(LinkButton lb)
    {
        try
        {

            if (lb != null)
                ScriptManager.GetCurrent(this).RegisterPostBackControl(lb);


        }
        catch (Exception ex)
        {
            ResultLabel.ResultLabelAttributes(ex.Message, ProjectUserControls.Enums.ResultLabel_Color.Red);
        }
        finally
        {
            ResultPanel.Controls.Add(ResultLabel);
        }
    }

的GridView:

<asp:GridView runat="server" ID="grdViewUploadedMaterialOther" Width="100%" OnRowDataBound="grdViewUploadedMaterialOther_RowDataBound"
    OnRowCommand="grdViewUploadedMaterialOther_RowCommand" HeaderStyle-BackColor="#99CC99"
    DataKeyNames="Pk_UploadedMaterialOther_ID"
    AutoGenerateColumns="false"
    CssClass="table table-condensed table-bordered table-striped table-responsive">
    <PagerSettings Mode="Numeric" />
    <PagerStyle HorizontalAlign="Center" CssClass="gvwCasesPager" />
    <Columns>

        <asp:TemplateField HeaderText="View Attachment">
            <ItemTemplate>
                <asp:LinkButton ID="btnLnkViewAttachment" runat="server" Text="View" CommandArgument='<%# Eval("MaterialPath") %>' CommandName="View"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Download">
            <ItemTemplate>
                <asp:LinkButton ID="btnLinkDownload" runat="server" Text='<%# Eval("MaterialPath") %>'
                    CommandArgument='<%# Eval("MaterialPath") %>' CommandName="Download"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Delete">
            <ItemTemplate>
                <asp:ImageButton ID="btnDelete" runat="server" ImageUrl="~/assets/global/images/delete.png"
                    CommandName="cmdDelete" CommandArgument='<%# Container.DataItemIndex %>'
                    ControlStyle-Width="20px"
                    ControlStyle-Height="20px" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

1 个答案:

答案 0 :(得分:0)

尝试将updatepanel控件添加到gridview中,以解决您的问题。

参考以下代码,这可能会对您有所帮助。

<asp:TemplateField HeaderText="Download">
        <ItemTemplate>
          <asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="fileUploadPanel">
        <ContentTemplate>
                    <asp:LinkButton ID="btnLinkDownload" runat="server" Text='<%# Eval("MaterialPath") %>'
                            CommandArgument='<%# Eval("MaterialPath") %>' CommandName="Download"></asp:LinkButton>
        </ContentTemplate>

                     <Triggers>
                        <asp:PostBackTrigger ControlID="btnLinkDownload" />
                     </Triggers>
    </asp:UpdatePanel> 
        </ItemTemplate>
    </asp:TemplateField>