我可以接受HttpPostedFileBase作为ViewModel的一部分

时间:2015-11-02 19:06:00

标签: c# asp.net-mvc controller viewmodel html-form

我正在设置一个视图和ViewModel来接受一些数据和一个文件。但是当我查看返回的模型时,我看不到文件。

这是我的ViewModel:

public class ResourceReviewViewModel
{
    public Guid ResourceReviewId { get; set; }
    //....
    [Display(Name="Review Document File")]
    public HttpPostedFileBase ReviewFile { get; set; }
}

我的观点:

我的控制器处理提交:

[HttpPost]
[ValidateAntiForgeryToken]
public virtual ActionResult ResourceReview(ResourceReviewViewModel model)
{
    //...
    return View(model); // model.ReviewFile is null
}

@model PublicationSystem.ViewModels.ResourceReviewViewModel

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Submit Your Review</h4>
        <hr/>
        @Html.HiddenFor(model => model.RequestReviewId, new { htmlAttributes = new { @class = "form-control" } })

        <div class="form-group">
            @Html.LabelFor(model => model.ReviewFile, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                <input type="file" id="ReviewFile" name="ReviewFile" value="ActionHandlerForForm" />
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Submit" class="btn btn-default" />
            </div>
        </div>
    </div>
}

模型返回值,但file属性为NULL。我从其他页面复制的输入HTML,因此我不确定是否需要value="ActionHandlerForForm"

1 个答案:

答案 0 :(得分:3)

是的,这是可能的。我认为在您的示例中,您只是缺少multipart/form-data

尝试此操作(将“索引”和“主页”替换为您拥有的视图/控制器):

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
...
}