Поле MVC3 не проверяется на рабочем сервере - PullRequest
0 голосов
/ 12 сентября 2011

Я использую 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);
        }

1 Ответ

0 голосов
/ 24 сентября 2011

IIS 6 и IIS 7 имеют разные ограничения на загрузку файлов. Согласно this , ограничение размера загрузки по умолчанию на IIS6 составляет скудные 200 КБ, в то время как на IIS 7 оно составляет 30 МБ согласно это . Тем не менее, из второй ссылки можно ожидать другую ошибку, если это ваша настоящая проблема (я не могу проверить это сейчас).

...