2010-08-19 171 views
4

我有一張表格將照片上傳到我的數據庫,我使用視圖模型來幫助這個過程。asp.net mvc文件上傳被傳遞爲null來查看模型

視圖模型:

public class GalleryViewModel 
{ 
    //Members: 
    public Gallery _photo    { get; set; } 
    public string _title     { get; set; } 
    public string _description   { get; set; } 
    public string _photographer   { get; set; } 
    public HttpPostedFileBase uploadFile { get; set; } 


    // Ctor 
    public GalleryViewModel(Gallery photo) 
    { 
     _photo = photo; 
    } 

    public GalleryViewModel() 
    { 
     _photo = null; 
    } 
} 

當我調試的代碼,我看到在我的控制器POST方法,所有表單中的信息在視圖模型更新除了uploadFile這是空值。 在表格中我使用enctype =「multipart/form-data」。當我使用我的母版頁時,uploadFile爲空,但是當我使用默認的MVC母版頁時,一切正常。

這是我的母版頁:

<%@ Master Language="C#" MasterPageFile="~/views/Shared/GeneralMaster.master" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<asp:Panel ID="notifiactions" runat="server"> 
    <% if (ViewData["notifications"] != null) 
    { %> 
     <br />  
      <table width="100%"> 
       <tr> 
        <td align="center"> 
         <div id="messages" style="width: 90%; border: solid 1px #A3A3A3"> 
          <br />  
          <%= Html.Encode(ViewData["notifications"])%>         
          <br /><br /> 
         </div> 
        </td> 
       </tr> 
      </table> 
    <% } %>  
</asp:Panel> 

<br /> 
    <table width="100%" cellpadding="0" cellspacing="0"> 
     <tr> 
      <td width="30%" align="center"> 
       <img src="\Content\SiteDesign\wine_in_frame2.JPG" alt="lk" /> 
      </td> 
      <td width="40%"> 
       <asp:ContentPlaceHolder ID="PageContent" runat="server" /> 
      </td> 
      <td width="30%" align="right"> 
       <img src="\Content\SiteDesign\set_with_frame.jpg" alt="Alon" /> 
      </td> 
     </tr> 
    </table>  

這是默認的asp.net mvc的母版頁

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 

<div id="header"> 
     <div id="title"> 
      <h1>My MVC Application</h1> 
     </div> 

     <div id="logindisplay"> 
      <% Html.RenderPartial("LogOnUserControl"); %> 
     </div> 

     <div id="menucontainer"> 

      <ul id="menu">    
       <li><%= Html.ActionLink("Home", "Index", "Home")%></li> 
       <li><%= Html.ActionLink("About", "About", "Home")%></li> 
      </ul> 

     </div> 
    </div> 

    <div id="main"> 
     <asp:ContentPlaceHolder ID="MainContent" runat="server" /> 

     <div id="footer"> 
     </div> 
    </div> 
</div> 

什麼想法?

回答

2

您還沒有公佈與被貼在表格的實際看,所以我只能猜測:

確保,您已設置您的形式爲「multipart/form-data的」,否則文件的加密類型將不會上傳。

<form id="form" name="form" action"controller/action" enctype="multipart/form-data"> 
... 
</form> 

或與HTML助手:

<% using(Html.BeginForm("action", "controller", "POST", new { enctype = "multipart/form-data" })) { 
... 
<% } %> 
+0

我使用: <%使用(Html.BeginForm( 「UploadPhoto」,「畫廊「,FormMethod。Post,new {enctype =「multipart/form-data」})){%> 正如我所說的,當我調試代碼時,推送上傳按鈕確實會調用post方法,並且視圖模型中的所有信息是當我調用UpdateModel時更新,除了文件是null ... – Eran 2010-08-20 07:58:00

0

原來我是用繼承我的項目的主要母版頁的母版頁。

在這個母版頁中有一個<form></form>標籤封裝了<asp:contentholder>。刪除表單標籤解決了這個問題。

0

將此代碼添加到形成將得到的形式的多部分數據 例如:attachement等

new { enctype = "multipart/form-data" }