MVC HttpPostedFilebase始终为null

时间:2019-04-29 08:47:08

标签: c# razor file-upload asp.net-mvc-5 httppostedfilebase

我正在尝试使用以下代码在asp.net mvc 5应用程序中上传文件。

请参阅cshtml和模型类,并指导我所缺少的内容。始终为HttpPostedFilebase返回null。

cshtml:

<form action="@Url.Action("send-message", "users", new { area = "security" })" class="form-horizontal" method="POST" data-async data-target="#send-message-modal" enctype="multipart/form-data">
    <div class="row">
        <div class="col-md-12">
            @Html.TextBoxFor(m => m.Email, new { placeholder = "Select the recipient...", @class = "form-control form-group-margin" })

            @Html.HiddenFor(m => m.RecipientId)
        </div>
    </div>

    @Html.TextBoxFor(m => m.Title, new { placeholder = "Enter a subject", @class = "form-control" })
    @Html.ValidationMessageFor(m => m.Title)


    @Html.TextAreaFor(m => m.Message, new { placeholder = "Enter your message", @class = "form-control", rows = 5 })
    @Html.ValidationMessageFor(m => m.Message)

    @Html.TextBoxFor(m => m.FileNew, new { type = "file", @class = "form-control", name= "FileNew" })
    <br/>

    @Html.ValidationMessageFor(m => m.FileNew)

    <div class="panel-footer text-right no-padding-hr no-padding-b">
        <button class="btn btn-primary">Send message</button>
    </div>
</form>

ViewModel:

public class SendMessageModel
{

    [Display(Name = "Recipient")]
    [DataType(DataType.EmailAddress)]
    [StringLength(255)]
    public string Email { get; set; }

    [Required]
    [Display(Name = "Recipient")]
    public int RecipientId { get; set; }

    [DataType(DataType.Text)]
    [Required]
    [Display(Name = "Message")]
    public string Message { get; set; }

    public bool IsSent { get; set; }

    [DataType(DataType.Text)]
    [Required]
    [Display(Name = "Subject")]
    public string Title { get; set; }

    public HttpPostedFileBase FileNew { get; set; }
}

Mvc操作:

[ActionName("send-message")]
    [HttpPost]

    public ActionResult SendMessage(SendMessageModel model)
    {

    }

2 个答案:

答案 0 :(得分:1)

在方法中添加HttpPostedFileBase参数。

public ActionResult SendMessage(SendMessageModel model, HttpPostedFileBase FileNew)
{}

答案 1 :(得分:1)

在“查看”页面中,您可以添加以下代码行

@using(Html.BeginForm("UploadFile","Upload", FormMethod.Post, new { 
enctype="multipart/form-data"}))  
{    
<div>  
    @Html.TextBox("file", "", new {  type= "file"}) <br />  

    <input type="submit" value="Upload" />  

    @ViewBag.Message  

</div>    
}  

和控制器

public ActionResult UploadFile(HttpPostedFileBase file, SendMessageModel model)  
    {  
        try  
        {  
            if (file.ContentLength > 0)  
            {  
                string _FileName = Path.GetFileName(file.FileName);  
                string _path = Path.Combine(Server.MapPath("~/UploadedFiles"), _FileName);  
                file.SaveAs(_path);  
            }  
            ViewBag.Message = "File Uploaded Successfully!!";  
            return View();  
        }  
        catch  
        {  
            ViewBag.Message = "File upload failed!!";  
            return View();  
        }  
     }   

因此您可以获取文件名,并将在Uploadedfolder中保存您的文件。 希望对您有帮助