我正在尝试将两个参数从视图发送到控制器,但第二个始终为空
Posted
技术标签:
【中文标题】我正在尝试将两个参数从视图发送到控制器,但第二个始终为空【英文标题】:I'm trying to send two parameters from view to controller but the second is always null 【发布时间】:2015-07-21 03:47:16 【问题描述】:我正在尝试将视图中的两个参数(HttpPostedFileBase 和模型)发送到控制器中的 Create 方法,但变量 HttpPostedFile photos 始终获取空值。 这是控制器代码:
public async Task <ActionResult> Create([Bind(Include =
"Id,Name,Description")] Models.Environment environment, HttpPostedFileBase photos)
if (ModelState.IsValid)
if (photos!=null)
DataBlobImage dataBlobImage = new DataBlobImage();
environment.Logo = await
dataBlobImage.CreateImage("environment",
environment.Id.ToString(), photos);
//Creation date
environment.CreationDate = DateTime.Now;
//Get the creation user ID
environment.CreationUser = 1;
//By default when you create a user is active
environment.Active = true;
db.Environment.Add(environment);
await db.SaveChangesAsync();
return Json(new success = true );
return View(environment);
查看代码:
@using (html.BeginForm("ModalCreate", "Environment",
FormMethod.Post,
new enctype = "multipart/form-data" ))
@Html.AntiForgeryToken()
<div class="modal-header create-window">
<button type="button" class="close"
data-dismiss="modal" aria- hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Crear nuevo Ambiente</h4>
</div>
<div class="modal-body">
<div class="form-horizontal">
@Html.ValidationSummary(true, "", new @class = "text-danger" )
<div class="form-group">
@Html.LabelFor(model => model.Name,
htmlAttributes: new @class = "control-label col-md-2" )
<div class="col-md-10">
@Html.EditorFor(model => model.Name,
new htmlAttributes = new @class = "form-control" )
@Html.ValidationMessageFor(model => model.Name, "",
new @class = "text-danger" )
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Description,
htmlAttributes: new @class = "control-label col-md-2" )
<div class="col-md-10">
@Html.EditorFor(model => model.Description,
new htmlAttributes = new @class = "form-control" )
@Html.ValidationMessageFor(model => model.Description, "",
new @class = "text-danger" )
</div>
</div>
<div class="form-group">
<div class="col-md-10">
<label for="file">Subir Imagen:</label>
<input id="photos" name="photos" type="file"
style="width: 100%;" />
</div>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal">Cancelar</button>
<input class="btn btn-primary" type="submit" value="Crear" />
</div>
</div>
</div>
【问题讨论】:
您的代码似乎没有任何问题,但事实上您有class="modal-header
和 return Json(new success = true );
之类的东西表明您正在使用 ajax 提交,在这种情况下您需要显示您的脚本(您需要使用FormData
来序列化您的表单和要发布的文件)
实际上我正在使用 Bootstrap 模式弹出窗口,我认为这是它不起作用的原因。因为当我在其他视图中运行代码时,它工作正常。
【参考方案1】:
我认为您不需要为此传递额外的参数。您始终可以在您的操作方法中访问它,如下所示:
HttpPostedFileBase file = Request.Files["NameOfYourFileUploadControl"];
希望这会有所帮助。
【讨论】:
我尝试过这种方式,但它不起作用,我通过这种方式将文件传递给我的 Action 方法:HttpPostedFileBase photos = Request.Files["photos"];但仍然得到空值。 你能调试 Request 对象看看你得到了什么吗?检查与文件相关的任何内容是否来自客户端。 具有 HttpPostedFileBase 文件的视图是使用引导模式插件的部分视图。它没有从客户端获取文件。但是当我在我的索引视图中使用操作方法调试它时它工作了,但是,这不是我需要的。是引导模态插件的问题吗? 您能否访问此链接以解决您的问题? ***.com/questions/26563289/…以上是关于我正在尝试将两个参数从视图发送到控制器,但第二个始终为空的主要内容,如果未能解决你的问题,请参考以下文章
将数据移动到另一个视图控制器,但第二个视图控制器在第一个视图控制器之前加载