我的控制器上傳與MVC HttpPostedFileBase文件== NULL
public ActionResult Edit(int id)
{
return this.EditDefault(id);
}
[HttpPost]
public ActionResult Edit(int id, Models.Company model)
{
return this.EditDefault(id, model);
}
我的模型
pulbic class Company
{
... Many other Propeties
public HttpPostedFileBase File { get; set; }
}
我查看
@using (Html.BeginForm(new { enctype = "multipart/form-data" }))
{
... Many other Properties
@Html.TextBoxFor(m => m.File, new
{
type = "file", style = "display:none"
})
... Submit
}
所以我現在的問題是,當我提交頁面模型中的信息是正確的,但是文件屬性仍然爲空。
我發現了一些解決方案,人們在控制器中添加了HttpPostedFileBase作爲參數(嘗試它不起作用),但是我想避免這種情況,因爲模型和控制器都是用T4生成的。那麼有人知道爲什麼File Property始終爲空?
會很高興一些幫助:)
更新:找到了解決辦法THX馬特泰伯。
對我來說,解決方案看起來像這樣,因爲我使用共享編輯頁面。 javascript部分是爲了隱藏實際的文件上傳元素,並使用span來代替,因爲文件上傳不適合樣式。
//Shared Part
@{
RouteData routeData = this.ViewContext.RouteData;
string currentController = routeData.GetRequiredString("controller");
}
@using (Html.BeginForm("Edit", currentController, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
//Special Part
... Many other Properties
//File upload which is hidden
@Html.TextBoxFor(m => m.File, new
{
type = "file", style = "display:none"
})
//Span which forwards the clicks to the file upload
<span id="fake-file-name">Kein Bild</span>
... Submit
}
<script type="text/javascript">
$(function() {
//forward the click from the span to the file upload
$("#fake-file-name").click(function() {
$("#File").click();
});
//display the chosen file name to the user with the styled span
$("#File").bind('change', function() {
//we don't want the C:\fakepath to show
var displayFileName = this.value.replace("C:\\fakepath\\", "");
$("#fake-file-name").text(displayFileName);
});
});
</script>
THX但嘗試過了,不起作用。 順便說一下這樣的: @ Html.TextBoxFor(M => m.File,新 { 類型= 「文件」,風格= 「顯示:無」 }) 生成此 <輸入的ID = 「文件」 名稱= 「File」style =「display:none」type =「file」value =「」> 所以幾乎相同 – Unavi
當你移除display:none樣式並試一試時會發生什麼? – user3341571
試圖刪除顯示:無。還是行不通。 – Unavi