Tôi đang cố tải lên tệp bằng Ajax.BeginForm() nhưng không hoạt động.không thể tải tệp lên bằng cách sử dụng Ajax.BeginForm() không đồng bộ
Xem My Chứa:
@using (Ajax.BeginForm("UploadFile", null, new AjaxOptions { HttpMethod="POST", UpdateTargetId = "result" }, new { enctype = "multipart/form-data" }))
{
<label id="lblUploadNewFile" for="fileUploadControl">Upload New File</label>
<input type="file" name="fileToUpload" id="fileUploadControl"/>
<input id="btnFileUpload" type="submit" value="Upload" />
<span id="result" />
}
và điều khiển tương ứng là:
[HttpPost]
public string UploadFile(FormCollection formData)
{
HttpPostedFileBase file=null;
try
{
file = Request.Files[0];
}
catch { }
if (file!=null && file.ContentLength > 0)
{
file.SaveAs(string.Concat(
AppDomain.CurrentDomain.BaseDirectory,
Path.GetFileName(file.FileName)));
return "Successfully Uploaded";
}
else
{
return "Upload Failed, please try again.";
}
}
Vấn đề là nó tải lên các tập tin nhưng không còn làm bất kỳ bài viết không đồng bộ khi tôi loại bỏ jquery.unobtrusive-ajax.js
. Thay vào đó, nó hoàn toàn trả sau.
Khi tôi thêm jquery.unobtrusive-ajax.js
theo quan điểm của tôi, nó hoạt động không đồng bộ nhưng không gửi tệp tải lên trong dữ liệu biểu mẫu. Không có tệp nào được gửi tới máy chủ trong Request.Files[]
.
Đó là không thể với Ajax vì những lý do rõ ràng: bạn có thể xây dựng một chiếc mũ trang tải lên bất kỳ tập tin truy cập trên các du khách hệ thống tập tin đến máy chủ mà không nói với anh ta. – Robert