点击提交按钮后。我在实体中变为空。 有人有解决方案吗?
查看
@using (Ajax.BeginForm("CreateRoom", "Room", new AjaxOptions { HttpMethod = "POST", OnComplete = "window.location.href='Index'" }, new { enctype = "multipart/form-data", id = "ajaxUploadForm" }))
{
<input type="file" name="Room" />
<input type="submit" value="OK" />
}
控制器
[HttpPost]
public ActionResult CreateRoom(RoomFileView entity)
{
//code
}
模型
public class RoomFileView
{
public RoomFileView();
public int BuildingId { get; set; }
public int CityId { get; set; }
public int CountryId { get; set; }
public int FloorId { get; set; }
public int LocationId { get; set; }
public HttpPostedFileWrapper Room { get; set; }
public string Content();
}
答案 0 :(得分:8)
我写了一个小黑客。它在大多数浏览器中都能正常工作,但IE中不支持FormData对象。您可以将此代码添加到自定义js文件或html页面。
window.addEventListener("submit", function (e) {
var form = e.target;
if (form.getAttribute("enctype") === "multipart/form-data") {
if (form.dataset.ajax) {
e.preventDefault();
e.stopImmediatePropagation();
var xhr = new XMLHttpRequest();
xhr.open(form.method, form.action);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
if (form.dataset.ajaxUpdate) {
var updateTarget = document.querySelector(form.dataset.ajaxUpdate);
if (updateTarget) {
updateTarget.innerHTML = xhr.responseText;
}
}
}
};
xhr.send(new FormData(form));
}
}
}, true);
答案 1 :(得分:5)
您无法使用AJAX上传文件。使用正式的Html.BeginForm。请查看此链接click here,因为这对您有所帮助。
如果您想使用异步上传,可以尝试一些可用的上传组件,例如Ajax Upload和Uploadify。
答案 2 :(得分:0)
您无法使用AJAX.Beginform上传文件。
有许多第三方js控件可供使用
但我发现它们没有多大用处。
您必须使用<iframe>
或使用Html.Beginform
答案 3 :(得分:0)
window.addEventListener("submit", function (e) {
var form = e.target;
if (form.getAttribute("enctype") === "multipart/form-data") {
if (form.dataset.ajax) {
e.preventDefault();
e.stopImmediatePropagation();
var xhr = new XMLHttpRequest();
xhr.open(form.method, form.action);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && xhr.status == 200) {
if (form.dataset.ajaxUpdate) {
var updateTarget = document.querySelector(form.dataset.ajaxUpdate);
if (updateTarget) {
updateTarget.innerHTML = xhr.responseText;
}
}
}
};
xhr.send(new FormData(form));
}
}}, true);
答案 4 :(得分:0)
很遗憾,您无法使用Ajax.BeginForm()上传文件。我通过在submit事件上运行onclick()事件来解决这个问题。我发现这个SO答案非常有用:Ajax.BeginForm is not working as expected