gpt4 book ai didi

asp.net-mvc - 使用 MVC HttpPostedFileBase == null 上传文件

转载 作者:行者123 更新时间:2023-12-01 16:51:11 27 4
gpt4 key购买 nike

我的 Controller

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
}

所以我现在的问题是,当我提交页面时,模型中的信息是正确的,但文件属性仍然为空。

我发现了一些解决方案,人们在 Controller 中添加 HttpPostedFileBase 作为参数(尝试过它也不起作用),但我想避免这种情况,因为模型和 Controller 是用 T4 生成的。那么有人知道为什么文件属性总是为空吗?

如果能得到一些帮助,我会非常高兴:)

更新:找到了解决方案,感谢 Matt Tabor。

对我来说,解决方案如下所示,因为我使用共享编辑页面。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>

最佳答案

您需要将表单方法指定为 post

@using (Html.BeginForm("Edit", "CONTROLLER", null,FormMethod.Post, new { enctype =   "multipart/form-data" }))

关于asp.net-mvc - 使用 MVC HttpPostedFileBase == null 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21959806/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com