0

我在获取上传的文件 (HTTPPostedFile) 和发布到操作的对象时遇到问题。我有一个名为小部件的类:

public class Widget
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FilePath { get; set; }
}

在小部件控制器中,我有一个“添加”方法

public ActionResult Add()
{
    return View();
}

和一个重载的方法来接受用户发回的内容

[HttpPost]
public ActionResult Add(Widget widget, HttpPostedFile file)
{
    // Save posted file using a unique
    // Store the path/unique name in Widget.FilePath
    // Save new Widget object
    return View();
}

在视图中我有以下内容:

@model Project.Models.Widget
@{
    using(Html.BeginForm())
    {
        Html.LabelFor(model => model.FirstName)<br />
        Html.TextBoxFor(model => model.FirstName)<br />
        Html.LabelFor(model => model.LastName)<br />
        Html.TextBoxFor(model => model.LastName)<br />
        <input type="file" id="file" /><br />
        <input type="submit" value="Save" />
    }
}

我想要做的是让用户填写表格并选择要上传的文件。上传文件后,我想使用唯一名称保存文件,然后将文件的路径存储为 widget.FilePath。

每次我尝试时,都会填充小部件对象,但 uploadFile 为空。

任何帮助将不胜感激。

4

1 回答 1

6

您的代码有几个问题。

  • 确保您已enctype="multipart/form-data"为您的表单设置正确的,否则您将无法上传任何文件。
  • 确保您的文件输入具有一个name属性,并且该属性的值与您的操作参数的名称相匹配。分配一个id对服务器端绑定没有影响。

例如:

@model Project.Models.Widget
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.LabelFor(model => model.FirstName)<br />
    @Html.TextBoxFor(model => model.FirstName)<br />
    @Html.LabelFor(model => model.LastName)<br />
    @Html.TextBoxFor(model => model.LastName)<br />
    <input type="file" id="file" name="file" /><br />
    <input type="submit" value="Save" />
}

还要确保您的控制器操作使用 aHttpPostedFileBase而不是HttpPostedFile

[HttpPost]
public ActionResult Add(Widget widget, HttpPostedFileBase file)
{
    // Save posted file using a unique
    // Store the path/unique name in Widget.FilePath
    // Save new Widget object
    return View();
}

您也可以将 2 个参数合并到一个视图模型中:

public class Widget
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FilePath { get; set; }
    public HttpPostedFileBase File { get; set; }
}

接着:

[HttpPost]
public ActionResult Add(Widget widget)
{
    // Save posted file using a unique
    // Store the path/unique name in Widget.FilePath
    // Save new Widget object
    return View();
}

最后阅读以下博文:http: //haacked.com/archive/2010/07/16/uploading-files-with-aspnetmvc.aspx

于 2012-05-24T15:34:24.893 回答