【问题标题】:Fileupload inside detailsview in edit mode在编辑模式下在详细信息视图中上传文件
【发布时间】:2011-09-23 20:59:24
【问题描述】:

您好,我尝试在详细信息视图中添加文件上传,我在此处附加了我的代码中的一些部分:

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="586px" 
        DefaultMode="Edit" AutoGenerateRows="False" BorderColor="White" 
        BorderStyle="None" DataSourceID="EntityDataSource1" GridLines="None" DataKeyNames="UserName" OnItemUpdated="DetailsView1_ItemUpdated" ONItemEditing="DetailsView1_ItemEditing">

然后文件上传控件被放置在模板字段内:

 <asp:TemplateField HeaderText="Foto">
                      <EditItemTemplate>


<asp:FileUpload ID="FileUpload1" runat="server" />
                         </EditItemTemplate>
     </asp:TemplateField>

数据源是:

 <asp:EntityDataSource ID="EntityDataSource1" runat="server" 
        ConnectionString="name=mesteriEntities" DefaultContainerName="mesteriEntities" 
        EnableFlattening="False" EntitySetName="Users" 
         EnableUpdate="True" AutoGenerateWhereClause="True" 
    EnableInsert="True">
         <WhereParameters>
        <asp:SessionParameter Name="UserName" SessionField="New" Type="String" />
         </WhereParameters>
    </asp:EntityDataSource>

背后的代码:

 protected void DetailsView1_ItemEditing(object sender, DetailsViewInsertEventArgs e)
    {
        FileUpload fu1 = (FileUpload)DetailsView1.FindControl("FileUpload1");
        if (fu1 == null)
            e.Cancel = true;
        if (fu1.HasFile)
        {
            try
            {
                string fileName = Guid.NewGuid().ToString();
                string virtualFolder = "~/UserPics/";
                string physicalFolder = Server.MapPath(virtualFolder);
               // StatusLabel.Text = "Upload status: File uploaded!";
                string extension = System.IO.Path.GetExtension(fu1.FileName);
                fu1.SaveAs(System.IO.Path.Combine(physicalFolder, fileName + extension));
                e.Values["foto"] = System.IO.Path.Combine(physicalFolder, fileName + extension);
            }
            catch (Exception ex)
            {
              Response.Write(ex.Message);
            }
        }
        else
            e.Cancel = true;



    }

我不确定为什么不起作用。它不会将文件上传到服务器上,也不会在文件的数据库中添加引用。为什么我在这里做错了?

谢谢

【问题讨论】:

    标签: c# file-upload detailsview


    【解决方案1】:

    据我所知(通过查看类文档:DetailsView Class)没有要处理的 OnItemEditing 事件?

    不过有一个 DetailsView.ItemUpdating 事件看起来可以解决问题:

    在单击 DetailsView 控件中的更新按钮时发生, 但在更新操作之前。

    我还认为找不到 FileUpload 控件,因为 FindControl 方法没有搜索它包含的控件的完整层次结构。

    尝试使用以下方法并像这样修改您的代码:

    FileUpload fu1 = (FileUpload)FindControl(DetailsView1, "FileUpload1");
    
    ...
    
    private Control FindControl(Control parent, string id)
    {
        foreach (Control child in parent.Controls)
        {
            string childId = string.Empty;
            if (child.ID != null)
            {
                childId = child.ID;
            }
    
            if (childId.ToLower() == id.ToLower())
            {
                return child;
            }
            else
            {
                if (child.HasControls())
                {
                    Control response = FindControl(child, id);
                    if (response != null)
                        return response;
                }
            }
        }
    
        return null;
    }
    

    【讨论】:

    • 谢谢!我不在乎看她/他发布了什么。
    • 谢谢 .. 添加仍然无法正常工作我应该挖掘更多...我是 .net 的初学者。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多