2011-11-29 1 views
0

저는 ASP.NET을 사용하여 웹 응용 프로그램을 개발 중입니다. 이제는 관리 작업을하고 있으며 관리자에게 웹 응용 프로그램 페이지 중 하나에 표시 될 뉴스 레터를 업로드 할 수있는 권한을 부여하려고합니다. ListView 내에서 ListView 컨트롤 및 UploadFile 컨트롤을 사용하려고합니다. 코드 숨김에 뭔가 이상한 점을 제외하고는 모든 것을 업로드하고 listView에 표시 할 수 없다는 점을 제외하면이 방식으로 모든 것이 잘 작동합니다. ASP.NET 코드에서ASP.NET : 웹 응용 프로그램에서 문서를 업로드하기위한 ListView 컨트롤 내의 UploadFile 컨트롤을 사용하는 방법은 무엇입니까?

부 :

<asp:ListView ID="ListView1" runat="server" DataKeyNames="NewsletterID" 
      DataSourceID="SqlDataSource1" InsertItemPosition="LastItem" 
      oniteminserting="ListView1_ItemInserting"> 

      <InsertItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="InsertButton" ImageUrl="images/insert.png" Width="20px" runat="server" CommandName="Insert" /> 

         <asp:ImageButton ID="CancelButton" ImageUrl="images/clear3.png" Width="20px" runat="server" CommandName="Cancel" /> 

         <asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Bind("Username") %>' OnPreRender="LoadUsername" /> 
        </td> 
        <td> 
         <asp:TextBox ID="NewsletterTitleTextBox" runat="server" 
          Text='<%# Bind("NewsletterTitle") %>' /> 
        </td> 
        <td> 
         asp:FileUpload ID="fileUpload1" runat="server" size="10" /> 
        <asp:HiddenField ID="HiddenField2" runat="server" Value='<%# Bind("Url") %>' /> 
        </td> 
       </tr> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <tr style=""> 
        <td> 
         <asp:ImageButton ID="DeleteButton" ImageUrl="images/delete.png" Width="20px" runat="server" CommandName="Delete" /> 

         <asp:ImageButton ID="EditButton" ImageUrl="images/edit.png" Width="20px" runat="server" CommandName="Edit" /> 
        </td> 
        <td> 
         <asp:Label ID="NewsletterTitleLabel" runat="server" Text='<%# Eval("NewsletterTitle") %>' /> 
        </td> 
        <td> 
         <a href='<%# Eval("Url") %>' target="_blank"> 
         <asp:Label ID="UrlLabel" runat="server" Text='<%# Eval("Url") %>' /> 
         </a> 
        </td> 
       </tr> 
      </ItemTemplate> 


<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
      ConnectionString="<%$ ConnectionStrings:testConnectionString %>" 
      DeleteCommand="DELETE FROM [Newsletter] WHERE [NewsletterID] = @NewsletterID" 
      InsertCommand="INSERT INTO [Newsletter] ([NewsletterTitle], [Url], [Username]) VALUES (@NewsletterTitle, @Url, @Username)" 
      SelectCommand="SELECT Newsletter.NewsletterID, Newsletter.NewsletterTitle, Newsletter.Url, Newsletter.Username FROM Newsletter INNER JOIN employee ON Newsletter.Username = employee.Username" 
      UpdateCommand="UPDATE [Newsletter] SET [NewsletterTitle] = @NewsletterTitle, [Url] = @Url, [Username] = @Username WHERE [NewsletterID] = @NewsletterID"> 
      <DeleteParameters> 
       <asp:Parameter Name="NewsletterID" Type="Int32" /> 
      </DeleteParameters> 
      <InsertParameters> 
       <asp:Parameter Name="NewsletterTitle" Type="String" /> 
       <asp:Parameter Name="Url" Type="String" /> 
       <asp:Parameter Name="Username" Type="String" /> 
      </InsertParameters> 
      <UpdateParameters> 
       <asp:Parameter Name="NewsletterTitle" Type="String" /> 
       <asp:Parameter Name="Url" Type="String" /> 
       <asp:Parameter Name="NewsletterID" Type="Int32" /> 
      </UpdateParameters> 
     </asp:SqlDataSource> 

수정 된 코드 숨김 (C에서 #) :

protected void Page_Load(object sender, EventArgs e) 
{ 

} 

protected void LoadUsername(object sender, EventArgs e) 
{ 
    ((HiddenField)sender).Value = Service.User.ID; 
} 

protected void ListView1_ItemInserting(object sender, ListViewInsertEventArgs e) 
{ 
    ListView lv = (ListView)sender; 
    FileUpload fUpload = (FileUpload)lv.InsertItem.FindControl("fileUpload1"); 
    //string path = ("UploadedPix\\" + fUpload.FileName); 
    //var tempPath = "some-temp-path-"; 
    var tempFile = fUpload.FileName; 

    if (fUpload.HasFile) 
    { 
     try { 
      fUpload.SaveAs(Server.MapPath("~/") + tempFile); 
      HiddenField hField= (HiddenField)lv.InsertItem.FindControl("HiddenField2"); 
     } 
     catch(Exception ex){ 
      e.Cancel = true; 
     } 
    } 
} 

코드 숨김 조금 수정 한 후, 나는 다음있어 오류 :

NULL 값을 'Url'열, 'psspdb.dbo.Newsletter'테이블에 삽입 할 수 없습니다. 열이 널을 허용하지 않습니다. INSERT가 실패합니다. 명세서가 종료되었습니다.

이 ListView는 데이터베이스의 뉴스 레터 테이블에 바인딩됩니다. 이 표의 구조는 다음과 같습니다. NewsletterID, NewsletterTitle, url, Username

Username은 Usre 테이블의 Username에 대한 외래 키입니다. 회보는 pdf 체재에있을 것이다. 내가 원하는 것은 관리자가이 링크를 클릭하여 뉴스 레터를 다운로드하거나 미리보기 전에 사용자에게 표시 될 뉴스 레터의 제목을 지정하게하는 것입니다.

+0

오류를 설명 할 수 있습니까? – CouncilScribe

+0

위에 굵은 글씨로 표시 – user976711

+0

'SqlDataSource1' 마크 업 표시 –

답변

0

오류 자체는 매우 자명합니다. 삽입시 url 필드가 비어 있습니다. url 필드가 null을 허용하도록하십시오. 그런 다음 삽입/업로드를 시도하고 작동하는지 확인하십시오. 업로드 작업을 알면 URL 필드와 값을 다시 사용할 수 있습니다.

관련 문제