2012-12-20 61 views
11

当我点击提交时,file参数为空。表单提交时模型为空

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> 

回答

37

它命名冲突和粘结剂尝试将文件属性FileViewModel对象与文件名绑定,这就是为什么你会得到空。 POST名称不区分大小写。

变化:

public ActionResult Create(FileViewModel file) 

要:

public ActionResult Create(FileViewModel model) 

或以任何其他名称

+0

Shiat!我不相信它会工作,但它确实。为什么这确实发生了? – Shimmy

+4

@Shimmy命名冲突和联编程序尝试使用'file'名称将'File'属性绑定到'FileViewModel'对象,这就是为什么你得到'null'的原因。 POST名称不区分大小写。 – webdeveloper

+1

你是个好人!接得好! – Shimmy

1

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

当然,这个错误并没有帮助指出这一点。