所以我已经阅读了几本关于此问题的指南,但我仍然遇到问题。我使用的是ASP.NET MVC 4 Razor。
这是我到目前为止所拥有的:
控制器
public class FormsController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
[AllowAnonymous]
public ActionResult TechProjectPlan(IEnumerable<HttpPostedFileBase> files, MvcApplication1.Models.TechProjectPlanModel model, string returnUrl)
{
//stuff here
}
}
这个表单包含很多不同的字段,而不仅仅是文件,所以我也有这个模型。请求到达控制器和操作就好了,但&#34;文件&#34;总是&#34; Count = 0&#34;,只是空。
这里是查看内容:
@using (Html.BeginForm("SubmitForm", "Forms", new { enctype = @"multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<h3>Project Information</h3>
<fieldset>
<legend>Project Information</legend>
<ol style="display:block; *display:inline; *zoom:1;">
<li style="float:left;">
@Html.LabelFor(m => m.Item1)
@Html.TextBoxFor(m => m.Item1, new { @class = "CostItem" })
</li>
<li style="float:left;">
@Html.LabelFor(m => m.Quantity1)
@Html.TextBoxFor(m => m.Quantity1, new { @class = "CostQuantity" })
<span> $</span>
</li>
<li style="float:left;">
@Html.LabelFor(m => m.PerUnitCost1)
@Html.TextBoxFor(m => m.PerUnitCost1, new { @class = "CostPerUnitCost" })
<span> $</span>
</li>
<li style="float:left;">
@Html.LabelFor(m => m.Extension1)
@Html.TextBoxFor(m => m.Extension1, new { @class = "CostExtension" })
</li>
<li style="float:left;">
@Html.LabelFor(m => m.Attachment1)
<input type="file" value="Upload" name="file" id="upload1" style="padding: 5px;" />
</li>
</ol>
<ol style="display:block; *display:inline; *zoom:1;">
<li style="float:left;">
@Html.TextBoxFor(m => m.Item2, new { @class = "CostItem" })
</li>
<li style="float:left;">
@Html.TextBoxFor(m => m.Quantity2, new { @class = "CostQuantity" })
<span> $</span>
</li>
<li style="float:left;">
@Html.TextBoxFor(m => m.PerUnitCost2, new { @class = "CostPerUnitCost" })
<span> $</span>
</li>
<li style="float:left;">
@Html.TextBoxFor(m => m.Extension2, new { @class = "CostExtension" })
</li>
<li style="float:left;">
<input type="file" value="Upload" name="files" id="upload2" style="padding: 5px;" />
</li>
</ol>
</fieldset>
<input type="submit" value="Submit"/>
}
正如您所看到的,输入类型文件都具有名称&#34; files&#34;,与控制器上的ActionResult中的参数匹配,并且我理解编译器应该隐式地匹配这些。
感谢您的帮助!
答案 0 :(得分:1)
尝试从&#39;文件&#39;更改文件输入控件的名称。到&#39;文件[0]&#39;
<input type="file" value="Upload" name="files[0]" id="upload1" style="padding: 5px;" />
同样对于其他输入控件,请确保它像文件[1],文件[2]等,并且操作方法中的参数名称是&#39; files&#39;即如果你的论点名称是&#39; arg&#39;然后你的文件输入控件的名称应该是arg [0],arg [1]等
还要确保表单标记包含enctype =&#34; multipart / form-data&#34;
<form action="<ActionName>" method="post" enctype="multipart/form-data">