2016-06-02 28 views
1

ViewからControllerへImageおよびImageNameを送信しようとしています。ここでコントローラASP.NET MVCへの画像の受け渡し

は私のコントローラがどのように見えるかです:

public class BoxAddViewModel : BaseViewModel 
{ 
    public int Id { get; set; } 
    [Required] 
    [DisplayName("Name")] 
    public string Name { get; set; } 
    [Required] 
    [DisplayName("Source")] 
    public HttpPostedFileBase Source { get; set; } 

} 

そして最後にビュー:これはモデルです

[HttpPost] 
    public ActionResult Add(BoxAddViewModel image) 
    { 
     //TODO: Add new box 
     return RedirectToAction("Index"); 
    } 

@using (Html.BeginForm("Add", "BoxManagement", new { @class = "form-horizontal", enctype = "multipart/form-data" })) 
{ 

    <div class="form-group"> 
     @Html.LabelFor(m => m.Name, new { @class = "col-sm-2 control-label" }) 
     <div class="col-sm-10"> 
      @Html.TextBoxFor(m => m.Name, new { @class = "form-control", @name = "Name"}) 
      @Html.ValidationMessageFor(m => m.Name) 
     </div> 
     @Html.LabelFor(m => m.Source, new { @class = "col-sm-2 control-label" }) 
     <div class="col-sm-10"> 
      <!--Html.TextBoxFor(m => m.Source, new { type = "file",}) --> 
      @Html.ValidationMessageFor(m => m.Source) 
      <input type="file" name="Source" id="Source" /> 
     </div> 
    </div> 
    <button type="submit" class="btn btn-primary"><span class="glyphicon glyphicon-plus"></span>Add</button> 
    @Html.ActionLink("Cancel", "Index", null, new { @class = "btn btn-default" }) 
} 

これは、Addメソッドと名前に入ってきますプロパティ値は正しいが、Sourceはnullです。

誰でもこれを解決する方法を知っていますか?

答えて

2

BeginForm()の間違ったオーバーロードを使用し、ルート属性を追加するのではなく、html属性(常に生成するhtmlを調べてください)を追加してください。

@using (Html.BeginForm("Add", "BoxManagement", FormMethod.Post, new { @class = "form-horizontal", enctype = "multipart/form-data" })) 

サイドノートを使用する:あなたのTextBoxFor()方法からnew { @name = "Name"}を削除します。バインドが失敗しない限り、HtmlHelperメソッドによって生成されたname属性をオーバーライドしないでください(この場合は何も行われません)

関連する問題