我有一个模型(简化后,删除了无关的属性):
public class SubmitModel
{
[Required]
[DataType("FileUpload")]
[Display(Name = "Formatted Data File")]
public HttpPostedFileBase FormattedDataFile { get; set; }
}控制器:
[HttpPost]
public ActionResult Submit(SubmitModel model)
{
if (this.ModelState.IsValid)
{
//...
}
return this.View(model);
}A FileUpload视图:
@{
IDictionary<string, object> htmlAttributes = Html.GetUnobtrusiveValidationAttributes(string.Empty);
}
<input type="file" id="@this.ViewData.TemplateInfo.GetFullHtmlFieldId(string.Empty)" name="@this.ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty)" @(new MvcHtmlString(htmlAttributes.ToHtmlAttributesString())) />
@Html.ValidationMessage(string.Empty)和一个简单的视图:
@model SubmitModel
@using (Html.BeginForm())
{
<div class="Form">
@Html.EditorForModel()
<div class="Footer">
<button class="Button" data-options='{ "icons": { "primary": "ui-icon-disk" } }'>Submit</button>
</div>
</div>
}这将呈现给这个HTML:
<form action="/Data/Submit" method="post">
<div class="Form">
<div class="Item">
<div class="Label Required">Formatted Data File:</div>
<div class="Input">
<input type="file" id="FormattedDataFile" name="FormattedDataFile" data-val-required="The Formatted Data File field is required." data-val="true" />
<span class="field-validation-error" data-valmsg-for="FormattedDataFile" data-valmsg-replace="true">The value 'Test.xlsx' is invalid.</span>
</div>
</div>
<div class="Footer">
<button class="Button" data-options='{ "icons": { "primary": "ui-icon-disk" } }'>Submit</button>
</div>
</div>
</form>单击Submit后,我将进入正确的控制器/操作,并且我的模型的FormattedDataFile属性为空。ModelState是无效的,因为“格式化数据文件字段是必需的”。同样的代码在我做过的一些MVC-3项目中工作得很好-在MVC-4中有什么不同吗?
发布于 2012-11-14 05:08:17
我想你在表格里漏掉了enctype="multipart/form-data"
http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2
https://stackoverflow.com/questions/13367565
复制相似问题