2012-01-12 14 views
0

これはASP.NET MVC 3 - File Uploadへのフォローアップの質問です。私は変更できないURL構文を持っています。 "/ person/{personID}/files"の構文でURLにファイルをアップロードする必要があります。現在、私は次のことをしようとしています:ASP.NET MVC3でファイルとパラメータを使用してアクションにポストする

index.htmlを

<form action="/person/2/files" method="post" enctype="multipart/form-data"> 
    <div>Please choose a file to upload.</div> 
    <div><input id="fileUpload" type="file" /></div> 

    <div><input type="submit" value="upload" /></div> 
</form> 

たときにフォームがロードPERSONIDパラメータ値を動的に移入されます。私は、「アップロード」をクリックしたときにかかわらず、私は戻って、次のアクションに掲示しています:

UploadController.cs

私はURLを使用してファイルの収集とパラメータの両方をPOSTするにはどうすればよい
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID) 
{ 
    foreach (string file in Request.Files) 
    { 
    // Request.Files is empty 
    } 

    return View(); 
} 

"/ person/{personID}/files"の構文ですか?私はこれが非常に特殊な要求であることを知っています。私は自分のプロジェクトで時間を使い果たしてしまっています。なぜ私が使っているアプローチがうまくいかないのか全然混乱しています。誰か助けてくれますか?

ありがとうございます。

答えて

6

このカスタムURL用に定義されたルートを持っていると仮定すると:

routes.MapRoute(
    "Upload", 
    "person/{uniqueid}/files", 
    new { controller = "Upload", action = "UploadFile" } 
); 

は、あなたは自分のファイル入力に名前を付ける必要があります。

<div><input id="fileUpload" type="file" name="file" /></div> 

また、私は代わりに、アクション引数を使用することをお勧めいたしますでしょうループする回数:Request.Files

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID, HttpPostedFileBase file) 
{ 
    return View(); 
} 

トン複数のファイル:

<div><input type="file" name="files" /></div> 
<div><input type="file" name="files" /></div> 
<div><input type="file" name="files" /></div> 
... 

は、コレクションを使用するには:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(int uniqueID, IEnumerable<HttpPostedFileBase> files) 
{ 
    return View(); 
} 

またfollowing blog post便利を見つけるかもしれません。

またはより良い、ビューモデルを使用します。

public class MyViewModel 
{ 
    public int UniqueID { get; set; } 
    public IEnumerable<HttpPostedFileBase> Files { get; set; } 
} 

、その後:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult UploadFile(MyViewModel model) 
{ 
    return View(); 
} 
+0

うわー。どうもありがとうございます。 "name"属性は私の問題を解決しました。 – user609886

関連する問題