Я использую EF + MVC3 с .net 4, у меня есть поле загрузки в моей форме, и на моем dev-сервере оно работает отлично, как и ожидалось, но когда я перемещаю его на свой рабочий сервер, когда быформа отправлена, я получаю The value '' is invalid.
ошибку проверки, даже когда я отправляю изображение вверх (я проверил в FireBug, и поле заполнено).
Поиск в Интернете, когда это всплывает,Похоже, что установщик модели EF закрыт.Но это не может иметь место, поскольку это свойство в модели не отображается ни на одно поле в базе данных (я не использую EF Poco напрямую, я создал модели вокруг них).
Я думаю, что это, вероятно, несоответствие IIS, так как мой dev-сервер работает под управлением 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);
}