我正在使用带有.net 4的EF + MVC3,我的表单上有一个上传字段,在我的开发服务器上,它按预期完美运行,但当我将它移动到我的生产服务器时,无论何时表单已发布我收到The value '' is invalid.
验证错误,即使我提交了一张图片(我已经在FireBug中签入,并填写了该字段)。
在网上看,无论什么时候出现这种情况,似乎都是EF模型的设定者是非公开的。但事实并非如此,因为模型上的这个属性不会映射到数据库中的任何字段(我不直接使用EF Poco,我已经围绕它们制作了模型)。
我认为这可能是IIS的差异,因为我的开发服务器正在运行IIS7 .net4,而生产者运行的是IIS6 .net4。
有没有人对为什么会发生这种情况有任何想法?
型号:
public class AddBookModel {
public AddBookModel () { }
public AddBookModel(Book book) {
Title = book.Title;
Description = HttpUtility.HtmlDecode(book.Description);
CoverExtension = book.CoverExtension;
}
[Required(ErrorMessage="This field cannot be blank")]
[DataType(DataType.Html)]
[Display(Name="Description:")]
public string Description { get; set; }
[Required(ErrorMessage="This field cannot be blank")]
[MaxLength(50)]
[Display(Name="Title:")]
public string Title { get; set; }
private string _CoverExtension = String.Empty;
public string CoverExtension {
get { return _CoverExtension; }
private set { if (value != null) { _CoverExtension = value; } }
}
public virtual string CoverPath { get { return String.Empty; } }
private HttpPostedFileBase _Image;
public HttpPostedFileBase Image {
get { return _Image; }
set { _Image = value; CoverExtension = value.GetFileExtension(); }
}
public ResultStatuses ActionStatus { get; set; }
}
查看(相关位):
<div class="field @if (ViewData.ModelState["Image"] != null && ViewData.ModelState["Image"].Errors.Count > 0) { <text>field-error</text>}">
@Html.LabelFor(m => m.Image)
@Html.Upload("Image")
@Html.ValidationMessageFor(m => m.Image, null, new { @class="error-hint" })
</div>
更新
我现在已经检查了我的工作场所的代码,该代码运行与生产服务器相同的IIS版本(我相信),除了将权限写入我正在尝试上传的文件系统之外,它还可以正常工作文件,但这不会与验证错误有关吗?
Html上传助手:
public static MvcHtmlString Upload(this HtmlHelper helper, string name) {
string result = string.Format("<input type=\"file\" id=\"{0}\" name=\"{0}\" />", name);
return MvcHtmlString.Create(result);
}
答案 0 :(得分:0)
IIS 6和IIS 7具有不同的文件上载限制。根据{{3}},IIS6上的默认上传大小限制为200kb,而在IIS7上,根据this,默认上传大小限制为30mb。也就是说,从第二个链接开始,如果这是你的实际问题,我会发现一个不同的错误(我现在无法测试)。