2016-10-27 83 views
-1

在我的MVC应用程序中,我尝试添加多个图像插入我的视图,我有我的ViewModel字段。所以我会用一个普通的按钮来呼叫我的控制器。MVC5剃刀输入图像到控制器从视图

@using (Html.BeginForm()) 
{ 
    <form action="" method="post" enctype="multipart/form-data">         
    <div> 
     <input id="fileupload" type="file" multiple="multiple" name="files" /> 
    </div> 
    </form> 
    <div> 
     .... some textbox etc. (InsertViewModel) 
    </div> 
    <div class="form-group"> 
    <div class="col-md-offset-8 col-md-10"> 
     <input type="submit" value="Create" class="btn btn-primary" /> 
    </div> 
    </div> 
} 

我的控制器看起来:

[HttpPost] 
public async Task<ActionResult> Insert(InsertViewModel model, IEnumerable<HttpPostedFileBase> files) 
{ ..... } 

但我永诺让我的文件数0对象

任何想法?

+0

[MVC 4 Razor File Upload]的可能重复(http://stackoverflow.com/questions/15680629/mvc-4-razor-file-upload) –

+0

您应该使用'@ Html.BeginForm'方法创建HTML表单 –

+0

具体而言,在这种情况下,'input type = file'不是'IEnumerable '类型默认的MVC活页夹不会绑定到你的参数,而是留空。 –

回答

1

请将提交按钮添加到窗体和所有文本框中。 然后它工作正常。 代码对于在查看

<form action="" method="post" enctype="multipart/form-data"> 
<div> 
    <input id="fileupload" type="file" multiple="multiple" name="files" /> 
</div> 
<div> 
    <input id="name" type="text" name="name" /> 
</div> 
<div> 
    <input id="address" type="text" name="address" /> 
</div> 
<div class="form-group"> 
    <div class="col-md-offset-8 col-md-10"> 
     <input type="submit" value="Create" class="btn btn-primary" /> 
    </div> 
</div> 

你好

我的控制器看起来像

[HttpPost] 
    public ActionResult Index(IEnumerable<HttpPostedFileBase> files, Demo obj) 
    { 
     return View(); 
    } 

MultipleUploadFileBinded

ClassObjectBinded

,如果你需要在单一视图中的两个表格,您还可以发送上传文件和接收到控制器使用Request.Files

if (Request.Files.Count > 0)//// Is image is uplaod by browse button 
{ 
       foreach(var fl in Request.Files) 
       { 
        var inputStream = Request.Files[0].InputStream; 
       } 

    } 

像上面你可以得到文件的流等

+0

这没有解决OP的问题 - 问题是无效的嵌套表单! –

+0

可以在一个HTML页面中包含多个

元素,但不能将它们嵌套。 –

+0

是的,我知道。这就是OP的问题所在 - 它们嵌套了形式('form action =“”method =“post”enctype =“multipart/form-data”>'在由@using(Html.BeginForm() )') - 所有这个答案说的是添加一个提交按钮,OP已经有了,并且添加文本框,哪个OP已经有了 –