2017-01-18 2 views
0

Возможно ли создать модель, которая, когда строительные леса создадут представление, которое отображает объект загрузки файла HTML?Scaffold a FileUploader

Например, создайте модель для загрузки изображений, которые будут поднять вид, чтобы включить загрузчик изображений.

Я пробовал модели с его следующими свойствами, но они отображались как текстовые поля без возможности загрузки.

[DataType(DataType.Upload)] 
    [Display(Name = "Upload a File")] 
    [Required(ErrorMessage = "Please choose file to upload.")] 
    public string file { get; set; } 

    [Display(Name = "Upload File 2")] 
    [Required(ErrorMessage = "Please choose file to upload.")] 
    public HttpPostedFile myfile { get; set; } 
+0

Не уверено, что леса в этом контексте, но делает [этот вопрос] (http://stackoverflow.com/questions/21772153/generate-file-upload-input-for-property-with -datatype-upload-attribute) help? – stuartd

ответ

0

Проблема с вашим HttpPostedFile, если вы используете EditorFor (х => x.myfile), что он делает это инспектировать тип имущество, указанное в выражении и попытаться найти шаблон соответствия редактора для этого тип. Эти шаблоны указывают Razor, какой HTML он должен генерировать для свойства типа, который реализует шаблон. У Razor есть несколько шаблонов, которые вы можете переопределить, и они не видны в проекте, но HttpPostedFile не является одним из них, поэтому, возможно, вы видите FileName, ContentType и ContentLength в качестве интерфейса, отображаемого для этого HttpPostedFile.

Беллоу реализация этого класса HttpPostedFile

public abstract class HttpPostedFileBase { 

     public virtual int ContentLength { 
      get { 
       throw new NotImplementedException(); 
      } 
     } 

     public virtual string ContentType { 
      get { 
       throw new NotImplementedException(); 
      } 
     } 

     public virtual string FileName { 
      get { 
       throw new NotImplementedException(); 
      } 
     } 

     public virtual Stream InputStream { 
      get { 
       throw new NotImplementedException(); 
      } 
     } 

     [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "filename", 
      Justification = "Matches HttpPostedFile class")] 
     public virtual void SaveAs(string filename) { 
      throw new NotImplementedException(); 
     } 

    } 

Поскольку один из этих шаблонов не на настройки по умолчанию, Razor исследует класс и пытается создать редактор для каждой публичной собственности класса.

Если указан тип над свойством

[DataType(DataType.SELECTYOURTYPEHERE)] 

Затем вы можете изменить шаблоны на

Views/Shared/EditorTemplates, например, вы можете сделать это

[DataType(DataType.Upload)] 
public HttpPostedFile myfile { get; set; } 

, а затем создайте и Upload.cshtml на Представления/Shared/EditorTemplates/Upload.cshtml с html, который вы хотите отобразить для загрузки.

Надеется, что это помогает

Смежные вопросы