2012-12-20 6 views
11

私がサブミットしたとき、fileパラメータはnullです。ここでフォームがサブミットされたときにモデルがnullです

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

あなたがnull得る理由です、ファイル名を指定してFileViewModelオブジェクトへのあなたのファイルのプロパティをバインドしようとしている紛争やバインダーに名前を付けています。 POST名は大文字と小文字を区別しません。

変更:

public ActionResult Create(FileViewModel file) 

へ:

public ActionResult Create(FileViewModel model) 

または他の名前に

+0

Shiat!私はそれが動作するとは思わなかったが、それはした。なぜ実際にこれが起こったのですか? – Shimmy

+4

@Shimmy名前の競合とバインダーは 'file'プロパティを' File'Model'オブジェクトに 'file'名前でバインドしようとしています。そのため、あなたは' null'を取得します。 POST名は大文字と小文字を区別しません。 – webdeveloper

+1

あなたはいい人です!いいキャッチ! – Shimmy

1

これは、同様に私の問題を解決しました。私が使用していた名前は、モデルに似ていました。これは、投稿されたモデルに割り当てられた変数と似ていました。フィールド名を並べ替えると、すべてが期待通りに機能しました。

もちろん、エラーはこのことを指摘するのに役立ちませんでした。

関連する問題