2017-10-09 83 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