我正在设置一个视图和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"
。
答案 0 :(得分:3)
是的,这是可能的。我认为在您的示例中,您只是缺少multipart/form-data
尝试此操作(将“索引”和“主页”替换为您拥有的视图/控制器):
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
...
}