好的,这让我开槽了!我在这个弹出窗口中有一个由Ajax.ActionLink触发的简单模态弹出窗口我有一个标准的HTML文件输入控件以及一些其他文本字段。当我提交时,我可以获得所有文本字段没有问题,但文件始终为空。以下是我的代码的副本:
更新操作:
[HttpPost]
public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase FileData, string clipID)
{
return RedirectToAction("Clips");
}
这是部分形式,在模态窗口中显示:
<div class="modal_content">
@using (Html.BeginForm("UpdateClip", "EditProfile", new { clipid = Model.ID }, FormMethod.Post, new { @id = "modalpopupform", enctype = "multipart/form-data" }))
{
<ul class="list_to_row">
<li class="cell" style="width: 75px">Clip Description</li>
<li class="cell">
@Html.TextBoxFor(m => m.Description, new { style = "width: 350px" })<br />
@Html.ValidationMessageFor(m => m.Description)
</li>
</ul>
<ul class="list_to_row">
<li class="cell" style="width: 75px">Base Cost</li>
<li class="cell">
@Model.BaseCost
</li>
</ul>
<ul class="list_to_row">
<li class="cell" style="width: 75px">Cost</li>
<li class="cell">
@Html.TextBoxFor(m => m.UserCost, new { style = "width: 350px" })<br />
@Html.ValidationMessageFor(m => m.UserCost)
</li>
</ul>
<ul class="list_to_row">
<li class="cell" style="width: 75px">Preview Image</li>
<li class="cell">
<input type="file" id="file" name="file" />
</li>
</ul>
<div class="clearfix"></div>
<div class="modal_button_area">
<input id="submitmodalpopup" type="submit" value="Update" class="button" />
<input id="closemodalbox" type="button" value="Cancel" class="button" />
</div>
}
</div>
有人可以对此有所了解吗?谷歌似乎没有任何东西,我的组合或如果我错过了一些我不知道的简单。欢呼声。
答案 0 :(得分:0)
在您的操作中,参数称为FileData
,因此在您的标记中也应保持一致:
<input type="file" id="file" name="FileData" />
或者,如果您想将文件保留为输入的名称,请在操作中重命名参数:
[HttpPost]
public ActionResult UpdateClip(ClipModel model, HttpPostedFileBase file, string clipID)
{
return RedirectToAction("Clips");
}
但我个人认为我将这个文件作为我的视图模型的属性包含在内,我不会打扰另外一个参数:
public class ClipModel
{
... some properties
public HttpPostedFileBase File { get; set; }
}
然后在我的强类型视图中,我将使用强类型帮助器生成文件输入,这样我就不必担心正确的命名:
<li class="cell">
@Html.TextBoxFor(x => x.File, new { type = "file" })
</li>
并且您的控制器操作签名将如下所示:
[HttpPost]
public ActionResult UpdateClip(ClipModel model)
{
return RedirectToAction("Clips");
}
这是大多数POST控制器操作签名的样子。