Có cách nào để nhận tệp được đăng (<input type="file" />
) để tham gia vào mô hình ràng buộc trong ASP.NET MVC mà không cần nhìn vào bối cảnh yêu cầu theo cách thủ công và không tạo phương thức hành động riêng mà chỉ lấy tệp được đăng là đầu vào?ASP.NET MVC đăng mô hình tập tin ràng buộc khi tham số là Model
Tôi đã có thể nghĩ rằng điều này sẽ làm việc:
class MyModel {
public HttpPostedFileBase MyFile { get; set; }
public int? OtherProperty { get; set; }
}
<form enctype="multipart/form-data">
<input type="file" name="MyFile" />
<input type="text" name="OtherProperty" />
</form>
public ActionResult Create(MyModel myModel) { ... }
Nhưng với kịch bản trên, MyFile
không phải là thậm chí một phần của giá trị nhà cung cấp giá trị trong bối cảnh ràng buộc. (OtherProperty
là, tất nhiên.) Nhưng nó hoạt động nếu tôi làm điều này:
public ActionResult Create(HttpPostedFileBase postedFile, ...) { ... }
Vì vậy, tại sao không có ràng buộc xảy ra khi các tham số là một mô hình, và làm thế nào tôi có thể làm cho nó hoạt động? Tôi không có vấn đề với việc sử dụng một mô hình tùy chỉnh chất kết dính, nhưng làm thế nào tôi có thể làm điều này trong một chất kết dính mô hình tùy chỉnh mà không cần nhìn vào Request.Files["MyFile"]
?
Để nhất quán, rõ ràng và có thể kiểm tra, tôi muốn mã của mình cung cấp tính ràng buộc tự động của tất cả các thuộc tính trên mô hình, bao gồm cả các thuộc tính được gắn với tệp được đăng mà không kiểm tra ngữ cảnh yêu cầu theo cách thủ công. Tôi hiện đang thử nghiệm mô hình ràng buộc sử dụng the approach Scott Hanselman wrote about.
Hoặc tôi đang đi về điều này theo cách sai? Làm thế nào bạn sẽ giải quyết điều này? Hay điều này là không thể bởi thiết kế do lịch sử tách biệt giữa Request.Form và Request.Files?
* Lưu ý: * không bỏ qua thuộc tính 'enctype' trên biểu mẫu. Nó phải được xác định là '" multipart/form-data "'. Nếu không, đối số 'HttpPostedFileBase' với tên trùng khớp với thuộc tính' name' trên thẻ đầu vào, sẽ vẫn là 'null' trên POST. –
Tôi đã sử dụng tương tự nhưng đã nhận lỗi: - Không thể liên kết nhiều tham số, trong $ .ajax tôi đã đặt: - type: 'POST', dataType: 'json', contentType: 'multipart/form-data' , data: formData – ujjaval