2

Я новичок в MVC и мне нужна помощь для загрузки файла, я использую umbraco. 7.2.1 Я пытаюсь отправить почту с письмом с приложением Ниже приведен мой код для него. Частичный вид ==> Имя КонтактКак загрузить файл В MVC + Umbraco 7

using (Html.BeginUmbracoForm<ContactVController>("HandleContactSubmit")) 
    { 
     @Html.LabelFor(model => model.Name)<br /> 
     @Html.EditorFor(model => model.Name)<br /> 
     @Html.ValidationMessageFor(model => model.Name)<br /> 

     @Html.LabelFor(model => model.Email)<br /> 
     @Html.EditorFor(model => model.Email)<br /> 
     @Html.ValidationMessageFor(model => model.Email)<br /> 
      <input type="file" name="file" id="file" /> 
     <p> 
      <input type="submit" value="Submit" /> 
     </p> 
    } 

Модель

public class ContactVModel 
{ 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    [RegularExpression(@"[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")] 
    public string Email { get; set; } 
    [Required] 
    public string Message { get; set; } 
    public HttpPostedFileBase attachment { get; set; } 
} 

Контроллер

public class ContactVController : SurfaceController 
    { 
    [HttpPost] 
    public ActionResult HandleContactSubmit(ContactVModel model) 
     { 
,.......... ...... .... 

    ,.......... ...... .... 

    MailBody + = model.Name ; 
MailBody + = model.Email; 

SendMail(MailBody) 
} 

Но я не знаю, model.attachment доступа, Как я могу сделать это для отправки почты с вложением (файл, который загружен) (Поскольку я могу получить имя, E почта и т.д.) я упомянул следующий пост, но я не мог получить доступ к Attachment

MVC 4 Razor File Upload

, но я не мог сделать его

+4

вам необходимо назвать поле ввода такой же, как свойство вы хотите, чтобы быть связаны, поэтому изменить его от «файл» в «вложение». –

+1

Вы имеете в виду что-то вроде этого?

+0

Да, это именно то, что я имею в виду. –

ответ

2

Изменение входного сигнала от

<input type="file" name="file" id="file" /> 

до

<input type="file" name="attachment" id="attachment" /> 

Таким образом, имущество y в модели соответствует полю ввода.

настоящее время я использую следующие:

In the cshtml file: 
@Html.UploadFor(model=> model.Attachment) 

static public class HtmlExtensions 
{ 
    public static IHtmlString UploadFor<TSource, TResult>(this HtmlHelper<TSource> html, Expression<Func<TSource, TResult>> propertyExpression) 
    { 
     var memberName = Reflection.GetPropertyName(propertyExpression); 
     return new HtmlString($"<input type=\"file\" name=\"{memberName}\" id=\"{memberName}\">"); 
    } 
} 

class Reflection 
{ 
    public static string GetPropertyName<TSource, TResult>(Expression<Func<TSource, TResult>> propertyExpression) 
    { 
     return (propertyExpression.Body as MemberExpression).Member.Name; 
    } 
}