1

我有一个模型(简化,除去多余的属性):HttpPostedFileBase没有被填充的

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); 
} 

一个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 &#39;Test.xlsx&#39; 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属性为null。 ModelState是无效的,说“格式化数据文件字段是必需的。”这个相同的代码在我所做的一些MVC-3项目中工作得很好 - 在MVC-4中对此有什么不同?

回答