我正在使用MVC 4 + VS 2012 + Framework 4.5开发Web应用程序。
我有三个部分视图,它们是基于用户操作在我的索引页面上动态呈现的。
在三个局部视图中,一个局部视图具有Upload File
功能,其中包含一些输入字段,如文本框。
问题:
当用户点击保存按钮(部分视图本身出现)时。我想将输入字段保存到我的数据库中,并将上传的文件存储在共享文件夹中。
我想使用Ajax实现这一点(上传文件并保存数据后,用户应该在同一个视图上)。
我该如何实现? JQuery解决方案没问题。
我尝试使用@Ajax.BeginForm
,但在上传文件后,会发生完整的回复。
答案 0 :(得分:71)
这是我的小型工作示例,它上传多个文件并上传到名为“垃圾”的文件夹中
客户端....
<html>
<head>
<title>Upload Example</title>
<script src="~/Scripts/jquery-2.1.0.intellisense.js"></script>
<script src="~/Scripts/jquery-2.1.0.js"></script>
<script src="~/Scripts/jquery-2.1.0.min.js"></script>
<script>
$(document).ready(function () {
$("#Upload").click(function () {
var formData = new FormData();
var totalFiles = document.getElementById("FileUpload").files.length;
for (var i = 0; i < totalFiles; i++)
{
var file = document.getElementById("FileUpload").files[i];
formData.append("FileUpload", file);
}
$.ajax({
type: "POST",
url: '/Home/Upload',
data: formData,
dataType: 'json',
contentType: false,
processData: false,
success: function (response) {
alert('succes!!');
},
error: function (error) {
alert("errror");
}
});
});
});
</script>
</head>
<body>
<input type="file" id="FileUpload" multiple />
<input type="button" id="Upload" value="Upload" />
</body>
</html>
服务器端....
public class HomeController : Controller
{
[HttpPost]
public void Upload( )
{
for( int i = 0 ; i < Request.Files.Count ; i++ )
{
var file = Request.Files[i];
var fileName = Path.GetFileName( file.FileName );
var path = Path.Combine( Server.MapPath( "~/Junk/" ) , fileName );
file.SaveAs( path );
}
}
}
答案 1 :(得分:-2)
这篇文章帮助了我:http://www.matlus.com/html5-file-upload-with-progress/
ActionResult仍然是ActionResult Upload(HttpPostedFileBase file) {...}
答案 2 :(得分:-4)
<script type="text/javascript">
$(document).ready(function (){
$('#from').datepicker({
format: "dd/mm/yyyy"
});
$('#to').datepicker({
format: "dd/mm/yyyy"
});
});