2011-04-21 22 views
8

İlk ve en önemlisi, ben bir UpdatePanel KULLANMIYORUM - bu sık karşılaşılan bir sorun gibi görünüyor, ama ben bile bu sorunu googled önce bir ne olduğunu bilmiyordum. FileUpload: HasFile her zaman false

Bir DetailsView bir dosya yükleyin ve veritabanına dosya ekleme girişimi var. Sorun şu ki, HasFile her zaman yanlış oluyor! Yanlış yaptığım bir fikrin var mı?

C#:

public partial class DocManager : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!(System.Convert.ToBoolean(Session["Admin"]))) 
      Response.Redirect("Index.aspx"); 
    } 

protected void DetailsView1_ItemInserting(object sender, DetailsViewInsertEventArgs e) 
{ 
    FileUpload fu1 = (FileUpload) DetailsView1.FindControl("FileUpload1"); 
    if (fu1 == null) 
    { 
     e.Cancel = true; 
     StatusLabel.Text = "Could not find file upload"; 
    } 
    if (fu1.HasFile) 
    { 
     try 
     { 
      string filename = Path.GetFileName(fu1.FileName); 
      fu1.SaveAs(Server.MapPath("~/Docs/") + filename); 
      StatusLabel.Text = "Upload status: File uploaded!"; 
      e.Values["FileName"] = filename; 
     } 
     catch (Exception ex) 
     { 
      StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
     } 

    } 
    else 
    { 
     e.Cancel = true; 
     StatusLabel.Text = "No file uploaded"; 
     return; 
    } 

    DropDownList dd1 = (DropDownList)DetailsView1.FindControl("DropDownList2"); 
    DropDownList dd2 = (DropDownList)DetailsView1.FindControl("DropDownList4"); 
    e.Values["Type"] = dd1.SelectedValue; 
    e.Values["MeetingID"] = dd2.SelectedValue; 

} 

protected void DetailsView1_ItemEditing(object sender, DetailsViewInsertEventArgs e) 
{ 
    FileUpload fu1 = (FileUpload)DetailsView1.FindControl("FileUpload2"); 
    if (fu1 == null) 
     e.Cancel = true; 
    if (fu1.HasFile) { 
     try 
     { 
      string filename = Path.GetFileName(fu1.FileName); 
      fu1.SaveAs(Server.MapPath("~/Docs/") + filename); 
      StatusLabel.Text = "Upload status: File uploaded!"; 
      e.Values["FileName"] = filename; 
     } 
     catch (Exception ex) 
     { 
      StatusLabel.Text = "Upload status: The file could not be uploaded. The following error occured: " + ex.Message; 
     } 
    } 
    else 
     e.Cancel = true; 

    DropDownList dd1 = (DropDownList)DetailsView1.FindControl("DropDownList1"); 
    DropDownList dd2 = (DropDownList)DetailsView1.FindControl("DropDownList3"); 
    e.Values["Type"] = dd1.SelectedValue; 
    e.Values["MeetingID"] = dd2.SelectedValue; 

} 

}

Pageload tek şey kullanıcı düzgün, başka bir şey daha önce çalışan edilmelidir kaydedilir emin olmak için bir çek.

bir şekilde kendisini:

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" 
    AutoGenerateRows="False" DataSourceID="Docs" DefaultMode="Insert" 
    OnItemInserting="DetailsView1_ItemInserting" 
    OnItemEditing="DetailsView1_ItemEditing" 
    > 
    <Fields> 
     <asp:BoundField DataField="Documents.Title" HeaderText="Title" 
      SortExpression="Documents.Title" /> 
     <asp:TemplateField HeaderText="Type" SortExpression="Type"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="DropDownList1" runat="server"> 
        <asp:ListItem Selected="True" Value="Presentation">Presentation</asp:ListItem> 
        <asp:ListItem Value="Handout">Handout</asp:ListItem> 
        <asp:ListItem Value="Minutes">Minutes</asp:ListItem> 
        <asp:ListItem Value="Agenda">Agenda</asp:ListItem> 
        <asp:ListItem Value="Other">Other</asp:ListItem> 
       </asp:DropDownList> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:DropDownList ID="DropDownList2" runat="server"> 
        <asp:ListItem Selected="True" Value="Presentation">Presentation</asp:ListItem> 
        <asp:ListItem Value="Handout">Handout</asp:ListItem> 
        <asp:ListItem Value="Minutes">Minutes</asp:ListItem> 
        <asp:ListItem Value="Agenda">Agenda</asp:ListItem> 
        <asp:ListItem Value="Other">Other</asp:ListItem> 
       </asp:DropDownList> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label3" runat="server" Text='<%# Bind("Type") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="MeetingID" SortExpression="MeetingID"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="Meetings" 
        DataTextField="Title" DataValueField="MeetingID"> 
       </asp:DropDownList> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="Meetings" 
        DataTextField="Title" DataValueField="MeetingID"> 
       </asp:DropDownList> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("MeetingID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="FileName" SortExpression="FileName"> 
      <EditItemTemplate> 
       <asp:FileUpload ID="FileUpload2" runat="server" /> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:FileUpload ID="FileUpload1" runat="server" /> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label2" runat="server" Text='<%# Bind("FileName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowEditButton="True" ShowInsertButton="True" /> 
    </Fields> 
</asp:DetailsView> 

ETA: bütün formu: Ayrıca, yukarıda C# kodunun geri kalanından düzenlenebilir

<asp:Content ID="Content2" ContentPlaceHolderID="mainContent" Runat="Server"> 
<h1>Document Manager</h1> 

<h2>Existing Documents</h2> 
<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
    AutoGenerateColumns="False" DataSourceID="Docs" 
    OnRowDeleting="GridView1_RowDeleting" 
    DataKeyNames="DocID" BackColor="White" BorderColor="#E7E7FF" 
    BorderStyle="None" BorderWidth="1px" CellPadding="3" GridLines="Horizontal"> 
    <AlternatingRowStyle BackColor="#F7F7F7" /> 
    <Columns> 
     <asp:BoundField DataField="Documents.Title" HeaderText="Title" 
      SortExpression="Documents.Title" /> 
     <asp:BoundField DataField="FileName" HeaderText="FileName" 
      SortExpression="FileName" /> 
     <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" /> 
     <asp:BoundField DataField="Meetings.Title" HeaderText="Meeting" 
      SortExpression="Meetings.Title" /> 
     <asp:CommandField ShowDeleteButton="True" ShowSelectButton="True" /> 
     <asp:HyperLinkField DataNavigateUrlFields="FileName" Text="Download" /> 
    </Columns> 
    <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" /> 
    <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> 
    <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" /> 
    <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" /> 
    <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" /> 
    <SortedAscendingCellStyle BackColor="#F4F4FD" /> 
    <SortedAscendingHeaderStyle BackColor="#5A4C9D" /> 
    <SortedDescendingCellStyle BackColor="#D8D8F0" /> 
    <SortedDescendingHeaderStyle BackColor="#3E3277" /> 
</asp:GridView> 
<h2>Add New</h2> 
<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="125px" 
    AutoGenerateRows="False" DataSourceID="Docs" DefaultMode="Insert" 
    OnItemInserting="DetailsView1_ItemInserting" 
    OnItemEditing="DetailsView1_ItemEditing" 
    > 
    <Fields> 
     <asp:BoundField DataField="Documents.Title" HeaderText="Title" 
      SortExpression="Documents.Title" /> 
     <asp:TemplateField HeaderText="Type" SortExpression="Type"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="DropDownList1" runat="server"> 
        <asp:ListItem Selected="True" Value="Presentation">Presentation</asp:ListItem> 
        <asp:ListItem Value="Handout">Handout</asp:ListItem> 
        <asp:ListItem Value="Minutes">Minutes</asp:ListItem> 
        <asp:ListItem Value="Agenda">Agenda</asp:ListItem> 
        <asp:ListItem Value="Other">Other</asp:ListItem> 
       </asp:DropDownList> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:DropDownList ID="DropDownList2" runat="server"> 
        <asp:ListItem Selected="True" Value="Presentation">Presentation</asp:ListItem> 
        <asp:ListItem Value="Handout">Handout</asp:ListItem> 
        <asp:ListItem Value="Minutes">Minutes</asp:ListItem> 
        <asp:ListItem Value="Agenda">Agenda</asp:ListItem> 
        <asp:ListItem Value="Other">Other</asp:ListItem> 
       </asp:DropDownList> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label3" runat="server" Text='<%# Bind("Type") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="MeetingID" SortExpression="MeetingID"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="DropDownList3" runat="server" DataSourceID="Meetings" 
        DataTextField="Title" DataValueField="MeetingID"> 
       </asp:DropDownList> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:DropDownList ID="DropDownList4" runat="server" DataSourceID="Meetings" 
        DataTextField="Title" DataValueField="MeetingID"> 
       </asp:DropDownList> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("MeetingID") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:TemplateField HeaderText="FileName" SortExpression="FileName"> 
      <EditItemTemplate> 
       <asp:FileUpload ID="FileUpload2" runat="server" /> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:FileUpload ID="FileUpload1" runat="server" /> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label2" runat="server" Text='<%# Bind("FileName") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 
     <asp:CommandField ShowEditButton="True" ShowInsertButton="True" /> 
    </Fields> 
</asp:DetailsView> 
<asp:AccessDataSource ID="Docs" runat="server" 
    DataFile="~/App_Data/Database1.accdb" 
    DeleteCommand="DELETE FROM [Documents] WHERE [DocID] = ?" 
    InsertCommand="INSERT INTO [Documents] ([Title], [Type], [FileName], [MeetingID]) VALUES (@Title, @Type, @FileName, @MeetingID)" 
    SelectCommand="SELECT Documents.DocID, Documents.Title, Documents.FileName, Documents.Type, Meetings.Title, Documents.MeetingID FROM 
    (Documents LEFT OUTER JOIN Meetings ON Documents.MeetingID = Meetings.MeetingID)" 
    UpdateCommand= "UPDATE [Documents] SET [Title] = ?, [Type] = ?, [FileName] = ?, [MeetingID] = ? WHERE [DocID] = ?"> 
    <DeleteParameters> 
     <asp:Parameter Name="DocID" Type="Int32" /> 
    </DeleteParameters> 
    <InsertParameters> 
     <asp:Parameter Name="Documents.Title" Type="String" /> 
     <asp:Parameter Name="Type" Type="String" /> 
     <asp:Parameter Name="FileName" Type="String" /> 
     <asp:Parameter Name="MeetingID" Type="Int32" /> 
    </InsertParameters> 
    <SelectParameters> 
     <asp:SessionParameter Name="?" SessionField="UserID" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Title" Type="String" /> 
     <asp:Parameter Name="Type" Type="String" /> 
     <asp:Parameter Name="FileName" Type="String" /> 
     <asp:Parameter Name="MeetingID" Type="Int32" /> 
     <asp:Parameter Name="DocID" Type="Int32" /> 
    </UpdateParameters> 
</asp:AccessDataSource> 
<asp:Label ID="StatusLabel" runat="server" Text="Label"></asp:Label> 
<asp:AccessDataSource ID="Meetings" runat="server" 
    DataFile="~/App_Data/Database1.accdb" 
    SelectCommand="SELECT [MeetingID], [Title] FROM [Meetings] WHERE ([AdminID] = ?)"> 
    <SelectParameters> 
     <asp:SessionParameter Name="AdminID" SessionField="UserID" Type="Int32" /> 
    </SelectParameters> 
</asp:AccessDataSource> 

, bu kadar uzun değildi Ana Sayfadaki Form Öğesi:

<body style="background-color: rgb(231, 231, 255);height:100%;margin:0px;padding:0px"> 
<form id="form1" runat="server"> 

ETA: Ben sorunu buldum. Bir dosya olarak boş bir metin dosyası kullanıyordum - ki bu da dosya yükleyiciyi dosya içermediğini düşünerek karıştırıyordu. Dosyaya bazı metinler ekleyerek mükemmel çalışır. yardım herkes için

teşekkürler!

+0

Sorun olmamalı. Kodunuzu derinden gördüm ancak kod ile ilgili herhangi bir sorun göremiyorum. Tam form tasarımı gönderebilir ve sayfa kodunu tamamlayabilir misiniz? Bence sorun diğer taraf. –

+1

+1, Stackoverflow'taki ilk sorusu olmasına rağmen, sorunuzu açıkça yazıp sorununuzu açıklıyorsunuz. –

+0

Sayfadaki form öğesi nasıl görünüyor? –

cevap

8

Sorunu buldum. Bir dosya olarak boş bir metin dosyası kullanıyordum - ki bu da dosya yükleyiciyi dosya içermediğini düşünerek karıştırıyordu. Dosyaya bazı metinler ekleyerek mükemmel çalışır. 0 bayt boyutunda bir dosya hiç başka yerde yapılacaktır hiçbir dosyayla aynı şey değildir neden Ranting

.

+0

Aferin, efendim! FileUpload bileşeni için kaynak kodu baktığımızda –

+0

, açıkladığı kolayca bulunuyor: '' '' public bool HasFile { olsun { HttpPostedFile postedFile = this.PostedFile; if (postedFile! = Null) return postedFile.ContentLength> 0; else false; } } '' '' Bu, [MSDN'de] yazılmış olanla uyuşmasa da (https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload. hasfile% 28v = vs.110% 29.aspx) – Alex

İlgili konular