2017-10-09 84 views
1

我想提交一个表单包含文件上传使用C#ASP MVC与实体。我的问题是该文件始终为空。C#中的文件上传与ASP.NET MVC没有剃须刀

的观点:

@model Com.Work.With.Me.Models.ObjVM 
<!DOCTYPE html> 
<html> 
<head> 
    <title>Test</title> 
</head> 
<body> 
<form id="formObj" action="AddMe"> 
    <input type="file" id="objPdfFile" name="Obj.PdfFile" /> 
    </select> 
    <input type="text" id="objName" name="Obj.Name" /> 
</form> 

视图模型:

public class ObjVM 
{ 
    public string Name{ get; set; } 
    public HttpPostedFileBase PdfFile{ get; set; } 
    public ObjVM() 
    { 
    } 
} 

控制器:

public ActionResult AddMe(ObjVM obj) 
{ 
    //her obj.Name is fine 
    //but obj.PdfFile is null 
    return View(); 
} 

任何想法?

+1

您是否已将头文件中的enctype设置为'multipart/form-data',并以此方式对内容进行编码? (https://stackoverflow.com/a/4526286/1838819)。这也需要在客户端都是HTTP POST,并且需要用[HttpPost]标记动作 – DiskJunky

+0

你是对的! – jBravo

+0

为什么你在标题中说“没有剃须刀”?你清楚地使用剃刀。 – mason

回答

0
Add Your Ui to this Code `enctype = "multipart/form-data"` Code 

@using (Html.BeginForm("Action Name", "Control Name", null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
    <input type="file" id="objPdfFile" value="@Model.PdfFile" name="Obj.PdfFile" /> 
     </select> 
     <input type="text" id="objName" value="@Model.Name" name="Obj.Name" /> 
    } 
1

由于@DiskJunky,我纠正我的形式加入方法= “POST” ENCTYPE = “多部分/格式数据”

<form id="formObj" action="AddMe" method="post" enctype="multipart/form-data"> 
    <input type="file" id="objPdfFile" name="Obj.PdfFile" /> 
    </select> 
    <input type="text" id="objName" name="Obj.Name" /> 
</form> 

而我的控制器添加[HttpPost]

[HttpPost] 
public ActionResult AddMe(ObjVM obj) 
{ 
    //obj.PdfFile is not null anymore ! 
    return View(); 
} 
+0

但是删除无意义的'value =“@ Model.PdfFile”' - 你无法设置文件输入的值(唯一可以设置的方式是用户在浏览器中选择文件)。它可以只是'name =“PdfFile”'(和'name =“文本框的名字”) –

+0

而且你正在使用剃须刀(你认为'@'是什么)。那么为什么不正确地使用'HtmlHelper'方法强制绑定到你的模型。 –

+0

@StephenMuecke是的,你是对的。只是剃刀形式的语法才是它的名字。这真是太痛苦了!我宁愿尽可能避免它。 – jBravo