2011-12-02 34 views
104

Nếu tôi viết như thế này:Làm thế nào để viết "Html.BeginForm" trong Razor

form action = "Hình ảnh" method = "post" enctype = "multipart/form-data"

nó hoạt động.

Nhưng trong Razor với '@' nó không hoạt động. Tôi có mắc lỗi gì không?

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

    <fieldset> 

     Select a file <input type="file" name="file" /> 
     <input type="submit" value="Upload" /> 

    </fieldset> 
} 

điều khiển của tôi trông như thế này:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Upload() 
{ 
    foreach (string file in Request.Files) 
    { 
     var uploadedFile = Request.Files[file]; 
     uploadedFile.SaveAs(Server.MapPath("~/content/pics") + 
             Path.GetFileName(uploadedFile.FileName)); 
    } 

    return RedirectToAction ("Upload"); 
} 
+0

là hành động thực sự "hình ảnh" hoặc là nó "Tải lên/Tải lên"? –

+0

thực sự tôi có hai bộ điều khiển. bộ điều khiển hình ảnh có hành động 'hình ảnh' .. và tải lên bộ điều khiển 'với hành động tải lên .. –

Trả lời

160

Các mã sau hoạt động tốt:

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
             new { enctype = "multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     Select a file <input type="file" name="file" /> 
     <input type="submit" value="Upload" /> 
    </fieldset> 
} 

và tạo ra như mong đợi:

<form action="/Upload/Upload" enctype="multipart/form-data" method="post">  
    <fieldset> 
     Select a file <input type="file" name="file" /> 
     <input type="submit" value="Upload" /> 
    </fieldset> 
</form> 

Mặt khác nếu bạn đang viết mã này bên trong t ngữ cảnh của cấu trúc bên máy chủ khác chẳng hạn như if hoặc foreach bạn nên xóa @ trước using. Ví dụ:

@if (SomeCondition) 
{ 
    using (Html.BeginForm("Upload", "Upload", FormMethod.Post, 
             new { enctype = "multipart/form-data" })) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      Select a file <input type="file" name="file" /> 
      <input type="submit" value="Upload" /> 
     </fieldset> 
    } 
} 

Theo như mã phía máy chủ của bạn có liên quan, đây là how to proceed:

[HttpPost] 
public ActionResult Upload(HttpPostedFileBase file) 
{ 
    if (file != null && file.ContentLength > 0) 
    { 
     var fileName = Path.GetFileName(file.FileName); 
     var path = Path.Combine(Server.MapPath("~/content/pics"), fileName); 
     file.SaveAs(path); 
    } 
    return RedirectToAction("Upload"); 
} 
+1

cảm ơn. Nhìn vào bộ điều khiển tôi cập nhật trong câu hỏi của tôi. Nó không hoạt động với mã Razor .. –

+2

@ user1076915, những gì * nó không hoạt động có nghĩa là *? Bạn có thể nêu chi tiết hơn được không. Tôi đã cập nhật câu trả lời của mình với mã mẫu về cách hoạt động của trình điều khiển của bạn có thể trông như thế nào. Nếu bạn không thể tải tệp được tải lên trong hành động của bộ điều khiển có nghĩa là bạn đã lồng các thẻ '

' (không được phép trong HTML) hoặc bạn có thể đang sử dụng một số javascript chiếm đoạt trình gửi biểu mẫu bình thường và thực hiện yêu cầu AJAX không hoạt động với các tệp tải lên. –

+0

Tôi đã sử dụng thao tác điều khiển và dao cạo '@using' .. nhưng nó hiển thị -> Mô tả: HTTP 404. Tài nguyên bạn đang tìm kiếm (hoặc một trong các phụ thuộc của nó) có thể đã bị xóa. hoặc tạm thời không khả dụng. Vui lòng xem lại URL sau và đảm bảo rằng URL được viết đúng chính tả. –

Các vấn đề liên quan