asp.net mvc文件上传作为null传递给视图模型

时间:2010-08-19 22:09:44

标签: asp.net-mvc file-upload master-pages

我有一个将照片上传到我的数据库的表单,我使用视图模型来帮助完成此过程。

查看型号:

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为null。 在表单中我使用enctype =“multipart / form-data”。当我使用我的母版页时,uploadFile为null但是当我使用默认的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>

任何想法?

3 个答案:

答案 0 :(得分:2)

您尚未使用发布的表单发布实际视图,因此我只能猜测:

请确保您已将表单的enctype设置为“multipart / form-data”,否则将无法上传文件。

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

或使用Html Helper:

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

答案 1 :(得分:0)

原来我使用的母版页继承自项目的主母版页。

在此母版页中,有一个<form></form>标记封装了<asp:contentholder>。删除表单标签解决了这个问题。

答案 2 :(得分:0)

将此代码添加到表单将获得表单上的多部分数据 例如:附属等。

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