2010-08-19 7 views
4

J'ai un formulaire qui télécharge une photo dans ma base de données, et j'utilise un modèle de vue pour faciliter ce processus.asp.net le téléchargement du fichier mvc est passé comme null pour voir le modèle

Voir Modèle:

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; 
    } 
} 

Quand je déboguer le code, je vois que la dans la méthode post dans mon contrôleur, toutes les informations du formulaire est mis à jour dans le modèle de vue, sauf pour la UploadFile qui est nul. Dans le formulaire, j'utilise enctype = "multipart/form-data". Lorsque j'utilise ma page maître, le fichier uploadFile est null mais lorsque j'utilise la page maître MVC par défaut, tout fonctionne correctement.

Voici ma page principale:

<%@ 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>  

Voici la page principale de asp.net par défaut 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> 

Des idées?

Répondre

2

Vous avez pas posté la vue réelle avec le formulaire qui est affiché, donc je ne peux deviner:

Assurez-vous, vous avez défini le enctype de votre formulaire à « multipart/form-data », sinon des fichiers ne sera pas téléchargé.

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

ou avec un Html Helper:

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

J'utilise: <% à l'aide (Html.BeginForm ("UploadPhoto", " Galerie ", FormMethod.Post, nouveau {enctype = "multipart/form-data"})) {%> Comme je l'ai dit, lorsque je débogue le code, appuyer sur le bouton de téléchargement appelle la méthode post, et toutes les informations dans le modèle de vue est mis à jour lorsque j'appelle UpdateModel, à l'exception du fichier qui est null ... – Eran

0

Tourne la page principale que j'utilisais hérite de page maître de mon projet.

Dans cette page maître, il y avait une étiquette <form></form> encapsulant le <asp:contentholder>. la suppression des étiquettes de formulaire a résolu ce problème.

0

ajoutant ce code pour obtenir des données formulaire sera multi partie sur la forme par exemple: Attachement etc.

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