2012-12-20 11 views
11

eingereicht Wenn ich einreichen getroffen, die file Parameter null ist. HierModell ist null, wenn das Formular

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; } 
} 

ist die 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> 

Antwort

37

Es Konflikt und Bindemittel zu benennen versuchen, Ihre Datei-Eigenschaft auf FileViewModel Objekt mit Dateinamen zu binden, das ist, warum Sie null erhalten. POST-Namen unterscheiden nicht zwischen Groß- und Kleinschreibung.

Wechsel:

public ActionResult Create(FileViewModel file) 

An:

public ActionResult Create(FileViewModel model) 

oder einen beliebigen anderen Namen

+0

Shiat! Ich habe nicht geglaubt, dass es funktionieren wird, aber es hat funktioniert. Warum ist das wirklich passiert? – Shimmy

+4

@Shimmy Es Namenskonflikt und Bindemittel versuchen, Ihre 'File' Eigenschaft' FileViewModel' Objekt zu binden, mit 'file' Namen, das ist, warum Sie' null' bekommen. POST-Namen unterscheiden nicht zwischen Groß- und Kleinschreibung. – webdeveloper

+1

Du bist ein guter Mann! Guter Fang! – Shimmy

1

Dies auch mein Problem gelöst. Es war ein Name, den ich benutzte, der dem Modell ähnlich war, das der Variable ähnlich war, die ich dem geposteten Modell auch zuwies. Sobald ich den Feldnamen aussortierte, funktionierte alles wie erwartet.

Natürlich war der Fehler nicht hilfreich dies in dem Hinweis auf.