2012-11-25 1 views
0

가능한 복제를 컨트롤러에 게시하지 :
MVC. HttpPostedFileBase is always null이미지

나는 사용자가 이미지를 업로드하고 나중에 참조 할 수 있도록 서버에 저장할 수 있어야합니다.

public ActionResult Create() 
{ 
    return View(new SliderImageViewModel()); 
} 

[HttpPost] 
public ActionResult Create(SliderImageViewModel sliderImage) 
{ 
    if (ModelState.IsValid) 
    { 
    var slider = new SliderImage(); 
    var lastSortOrder = 
     Context.SliderImages.Select(p => p.SortOrder).DefaultIfEmpty(0).Max(); 
    slider.SortOrder = lastSortOrder + 1; 

    //TODO: upload image to server and get physical path (GUID) 
    //slider.ImageUrl = physical path 

    Context.SliderImages.Add(slider); 
    Context.SaveChanges(); 
    return RedirectToIndex(); 
    } 
    else 
    return View(sliderImage); 
} 


public class SliderImageViewModel 
{ 
    [RequiredValue] 
    public HttpPostedFileBase Image { get; set; } 
    private string _Content; 
    public string Content 
    { 
    get 
    { 
     if (string.IsNullOrWhiteSpace(_Content)) 
     return null; 
     else 
     return _Content; 
    } 
    set { _Content = value; } 
    } 
} 

Create.cshtml :

SliderController.cs : 여기

는 일부 코드의

@using (Html.BeginForm("Create", "Slider", FormMethod.Post)) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 
    <legend>Page</legend> 

    <div class="editor-label"> 
     @Html.Label("Content") 
    </div> 
    <div class="editor-field"> 
     @Html.TextBox("content") 
    </div> 

    <div class="editor-label"> 
     @Html.Label("Image") 
    </div> 
    <div class="editor-field"> 
     @Html.TextBox("image", null, new { type = "file", accept = "image/*" }) 
    </div> 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 

    </fieldset> 
} 

나는 형태의 sliderImage에서 Image 속성을 제출하면 인수가 null 인 경우 (Content), 어떻게 해결해야합니까? 당신이 파일을 업로드 할 수 있도록하려면

답변

2

당신은 양식에 multipart/form-dataenctype 속성을 설정해야합니다

@using (Html.BeginForm("Create", "Slider", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    ... 
} 

더 자세한 내용은 following article를 살펴 보자.