2010-03-22 42 views
6

Tôi có một biểu mẫu liên kết mô hình và tải lên tệp bằng cách sử dụng trình kết nối mặc định cho HttpPostedFileBase.Ràng buộc HttpPostedFileBase bằng cách sử dụng Ajax.BeginForm

Tính năng này hoạt động tốt khi sử dụng Html.BeginForm(). Tuy nhiên, tôi muốn thực hiện cùng một hành động bằng cách sử dụng AJAX vì vậy tôi đã thay thế điều này bằng Ajax.BeginForm() thay đổi các tham số cho phù hợp.

Mô hình vẫn liên kết chính xác, tuy nhiên tôi không thể tải tệp lên để liên kết với HttpPostedFileBase.

này liên kết với các mô hình và các tập tin tải lên:

<% using (Html.BeginForm("MapUpdateColumns", "RepositoryAdmin", FormMethod.Post, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%> 

này chỉ liên kết các mô hình:

<% using (Ajax.BeginForm("MapUpdateColumns", "RepositoryAdmin", new AjaxOptions { UpdateTargetId = "columnMappings" }, new { id = "UpdateDataset", enctype = "multipart/form-data" })) {%> 

Bộ điều khiển hành động:

public ActionResult MapUpdateColumns(DatasetViewModel model, HttpPostedFileBase sourceFile) 

Nếu điều này là có thể, và nếu vậy tôi đang làm gì sai? Cảm ơn.

Trả lời

9

Bạn không thể tải tệp lên bằng AJAX. Một cách để đạt được điều này là sử dụng một khung nội tuyến ẩn sẽ mô phỏng một cuộc gọi AJAX và thực hiện tải lên tệp thực tế hoặc sử dụng Flash. Đây là một plugin rất tốt đẹp jQuery Form sử dụng khung nội tuyến ẩn có khả năng minh bạch hóa việc gửi biểu mẫu chứa các trường tệp.

+0

Cám ơn giải thích rõ ràng. Tôi đã sử dụng plugin jQuery Form đó một thời gian trước nên tôi nên nhớ chính điều này! Chúc mừng. – TonE

-1

Vâng tôi cũng đồng ý. Bạn có thể tải tệp lên bằng cách sử dụng 'Ajax.BeginForm'.Add' enctype = "multipart/form-data" đối với đối tượng AjaxOptions.

0

Thanh id = "file" trong thẻ đầu vào

của bạn trong tham số ActionResult BẠN HttpPostedFileBase 'file' tên và xem tên thẻ nên cùng

[HttpPost] [ValidateAntiForgeryToken] public ActionResult Tạo (tbl_products tbl_products, tệp HttpPostedFileBase) { nếu (ModelState.IsValid) { tbl_products.phototype = file.ContentType; tbl_products.photo = new byte [file.ContentLength]; file.InputStream.Read (tbl_products.photo, 0, file.ContentLength);

  if(obj.insert(tbl_products)) 
      { 
      return RedirectToAction("Index"); 
      } 
      else 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.Forbidden); 
      } 
     } 

     return View(tbl_products); 
    } 

CNTT làm việc cho tôi

+3

Tại sao bạn la hét? –

+1

Xin lỗi, internet của tôi đã ngắt kết nối liên tục, tôi đang la hét để trả lời câu hỏi được đề cập –

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