Asp.net mvc 提交表单时,模型为空

Asp.net mvc 提交表单时,模型为空,asp.net-mvc,forms,razor,submit,form-submit,Asp.net Mvc,Forms,Razor,Submit,Form Submit,当我点击submit时,文件参数为空 public ActionResult Create() { return View(new FileViewModel()); } [HttpPost] [InitializeBlobHelper] public ActionResult Create(FileViewModel file) { if (ModelState.IsValid) { //upload file } else return Vie

当我点击submit时,
文件
参数为空

public ActionResult Create()
{
  return View(new FileViewModel());
}

[HttpPost]    
[InitializeBlobHelper]
public ActionResult Create(FileViewModel file)
{
  if (ModelState.IsValid)
  {
     //upload file
  }
  else
    return View(file);
}

public class FileViewModel
{
  internal const string UploadingUserNameKey = "UserName";
  internal const string FileNameKey = "FileName";

  internal const string Folder = "files";

  private readonly Guid guid = Guid.NewGuid();

  public string FileName
  {
    get
    {
      if (File == null)
        return null;
      var folder = Folder;
      return string.Format("{0}/{1}{2}", folder, guid, Path.GetExtension(File.FileName)).ToLowerInvariant();
    }
  }

  [RequiredValue]
  public HttpPostedFileBase File { get; set; }
}
以下是cshtml:

@model MyProject.Controllers.Admin.FileViewModel

@{
  ViewBag.Title = "Create";
  Layout = "~/Views/Shared/_BackOfficeLayout.cshtml";
}

@using (Html.BeginForm("Create", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
  <fieldset>
    <legend>Create</legend>

    <div class="editor-label">
      @Html.LabelFor(model => model.File)
    </div>
    <div class="editor-field">
      @Html.TextBoxFor(model => model.File, new { type = "file" })
      @Html.ValidationMessageFor(model => model.File)
    </div>

    <p>
      <input type="submit" value="Create" />
    </p>
  </fieldset>
}

<div>
  @Html.ActionLink("Back to List", "Index")
</div>
@model MyProject.Controllers.Admin.FileViewModel
@{
ViewBag.Title=“创建”;
Layout=“~/Views/Shared/\u BackOfficeLayout.cshtml”;
}
@使用(Html.BeginForm(“创建”、“文件”、FormMethod.Post、新的{enctype=“multipart/formdata”}))
{
创造
@LabelFor(model=>model.File)
@Html.TextBoxFor(model=>model.File,新的{type=“File”})
@Html.ValidationMessageFor(model=>model.File)

} @ActionLink(“返回列表”、“索引”)
命名冲突和绑定器试图将文件属性绑定到具有文件名的FileViewModel对象,这就是为什么会出现null。帖子名称不区分大小写

更改:

public ActionResult Create(FileViewModel file)
致:


或者其他任何名字

这也解决了我的问题。我使用的名称与模型相似,也与我分配给发布模型的变量相似。一旦我整理出字段名,所有的工作都如期进行


当然,这个错误对指出这一点毫无帮助。

Shiat!我不相信它会起作用,但它确实起作用了。为什么会发生这种情况?@Shimmy它的命名冲突和绑定器试图将您的
文件
属性绑定到
文件视图模型
对象和
文件
名称,这就是为什么您会得到
null
。帖子名称不区分大小写。我也遇到了类似的错误。但是我没有得到你的解决方案。谢谢,我被困在几个小时内,无法理解为什么它突然停止工作!抢手货
public ActionResult Create(FileViewModel model)