c# - 文件输入向控制器发送空值
问题描述
我在表单中有一个文件输入。理想情况下,我希望它允许在提交表单时上传多个文件。它正在发送空列表,所以我尝试更改为只接收一个文件,现在它正在发送 null。
我的cshtml表单:
@using (Html.BeginForm(nameof(ServiceCallController.AddMessage), "ServiceCall", FormMethod.Post))
{
@Html.HiddenFor(m => m.Id)
<div class="row">
<div class="col-md-1">
@Html.Label("New Message")
</div>
<div class="col-md-11">
@Html.Kendo().EditorFor(m => m.NewMessage).Tools(t => t.Clear())
</div>
</div>
<div class="row">
<div class="col-md-1">
@Html.Label("Attachments")
</div>
<div class="col-md-11">
<input type="file"
id="myFile"
name="myFile"
/>
</div>
</div>
<div class="row">
<div class="col-md-12">
@Html.Kendo().Button().Content("Add Message").Name("SubmitAddMessage")
</div>
</div>
}
我的控制器方法:
public ActionResult AddMessage(int id, string newMessage, HttpPostedFileBase myFile)
{
if (myFile == null) throw new ArgumentNullException(nameof(myFile));//This should not happen
return RedirectToAction(nameof(MyView), new { id });
}
以及在网络选项卡请求表单数据中发送的内容:
Id: 5473
NewMessage: Why is this not working?
myFile: Chrysanthemum.jpg
我究竟做错了什么?为什么我的文件没有发送到控制器?
解决方案
您应该将 enctype 添加为multipart/form-data
@using (Html.BeginForm(nameof(ServiceCallController.AddMessage), "ServiceCall", FormMethod.Post, new { enctype = "multipart/form-data" }))
以及动作方法:
[HttpPost]
public ActionResult AddMessage(int id, string newMessage, HttpPostedFileBase myFile)
{
if (myFile == null) throw new ArgumentNullException(nameof(myFile));//This should not happen
return RedirectToAction(nameof(MyView), new { id });
}
推荐阅读
- javascript - React - API 调用返回正确的结果但不传递
- javascript - 如何防止列总计数显示在 component.html 上?
- angular - 在表单中插入日期时,我想保留 Primeng 的 InputMask dd/mm/yy = 20/12/2020 的默认格式
- kotlin - 使用协程处理异常
- rabbitmq - MQ(RabbitMQ,ActiveMQ...) 和网络库(ACE, Asio, libevent...) 有什么区别?
- huawei-mobile-services - 集成HMS Core Map Kit 4.0.1.301后同步资源文件冲突
- python - 每个直方图曲线下方的渐变填充 - Python
- typescript - 对象接口打字稿的对象
- javascript - 如何将 onclick 事件存储在 Django 数据库中?
- ruby-on-rails - 在 IIS 上的 Rails 应用程序上配置 ruby 时出现异常