mvc传递文件与模型到控制器发布

时间:2017-04-22 18:19:12

标签: asp.net-mvc http httppostedfilebase

是否可以在发布到控制器上时将HttpPostedFileBase附加到您的模型上?

我只能在没有模特的情况下传递HttpPostedFileBase

在我的浏览器的网络标签中,我看到文件已经附加但是当它到达我的控制器时它是空的

[HttpPost]
public ActionResult ProcessFile(UploadMopdelWrapper model)
{

}

public class UploadMopdelWrapper
{
    public UploadMopdelWrapper()
    {

    }

    public UploadMopdelWrapper(UploadMopdel upload)
    {
        UploadModel = upload;
    }
    public HttpPostedFileBase SelectedFile { get; set; }
    public UploadMopdel UploadModel { get; set; }
    public IEnumerable<ExcelRecord> ExcelList { get; set; }
}

这是视图

@using (@Html.BeginForm("ProcessFile", "Hcp", new { enctype = "multipart/form-data" }))
{
    <div class="form-group">
        <div class="col-md-4 text-right">
            @Html.LabelFor(x => x.UploadModel.JobNumber, new { @class = "control-label" })
        </div>
        <div class="col-md-8">
            @Html.TextBoxFor(x => x.UploadModel.JobNumber, new { @class = "form-control" })
            @Html.ValidationMessageFor(x=>x.UploadModel.JobNumber, null, new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-4 text-right">
            @Html.LabelFor(x => x.UploadModel.JobName, new { @class = "control-label" })
        </div>
        <div class="col-md-8">
            @Html.TextBoxFor(x => x.UploadModel.JobName, new { @class = "form-control" })
            @Html.ValidationMessageFor(x => x.UploadModel.JobName, null, new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-4 text-right">
            @Html.LabelFor(x => x.UploadModel.NotificationEmail, new { @class = "control-label" })
        </div>
        <div class="col-md-8">
            @Html.TextBoxFor(x => x.UploadModel.NotificationEmail, new { @class = "form-control" })
            @Html.ValidationMessageFor(x => x.UploadModel.NotificationEmail, null, new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-4 text-right">
            <label class="control-label">Selkect a File:</label>
        </div>
        <div class="col-md-8">
            <input type="file" name="selectedFile" />
        </div>
    </div>
    <div class="col-md-offset-4 col-md-8">
        <input type="submit" class="btn btn-info btn-block col-md-12" />
    </div>

}

在我的网络标签中,我看到了:

UploadModel.JobNumber:1
UploadModel.JobName:w
UploadModel.NotificationEmail:w
selectedFile:week7_homework.sql

1 个答案:

答案 0 :(得分:2)

您必须将表单方法设置为Post,如

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

因为它会将new { enctype = "multipart/form-data" }视为路线值。如果您查看正在使用的BeginForm的重载

FormExtensions.BeginForm Method (HtmlHelper, String, String, Object)