使用ASP.NET MVC站点中的jQuery对话框上载照片
Upload photo with jQuery Dialog in ASP.NET MVC site
我正在构建一个ASP.NET MVC 3应用程序,并尝试使用jQuery Dialog上传照片。这是我的代码,但问题是我的model
的HttpPostedFileBase
对象(表示要上传的文件)在服务器端总是为空(HttpPost
方法)。
我的控制器
public ActionResult AddProductPhoto(int id)
{
var model = new UploadImageModel {ProductId = id};
return PartialView("_UploadFile", model);
}
[HttpPost]
public ActionResult AddProductPhoto(UploadImageModel model)
{
// model.File is always null
return Json(new { Success = true });
}
型号
public class UploadImageModel
{
public int ProductId { get; set; }
[FileExtensions(Extensions = "jpg, jpeg, png")]
public HttpPostedFileBase File { get; set; }
}
上传部分视图(_UploadFile)
@model DalilCompany.Models.UploadImageModel
@using (Html.BeginForm("AddProductPhoto", "Product", FormMethod.Post,
new { id = "uploadProductPhotoForm", enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
@Html.HiddenFor(m => m.ProductId)
<div>
@Html.LabelFor(m => m.File)
@Html.TextBoxFor(m => m.File, new { type = "file" })
</div>
}
主视图
<span productId ="@Model.ProductId" id="add_product_photo_link">
Upload photo
</span>
<div id="AddPhotoDlg" title="" style="display: none"></div>
<script type="text/javascript">
$(function () {
$("#AddPhotoDlg").dialog({
autoOpen: false,
width: 550,
height: 250,
modal: true,
buttons: {
"Upload": function () {
$.post("/Product/AddProductPhoto",
$("#uploadProductPhotoForm").serialize(),
function () {
$("#AddPhotoDlg").dialog("close");
alert('upload success');
});
},
"Close": function () { $(this).dialog("close"); }
}
});
});
$("#add_product_photo_link").click(function () {
var id = $(this).attr("productId");
$("#AddPhotoDlg").html("")
.dialog("option", "title", "Ajouter une photo")
.load("/Product/AddProductPhoto/" + id,
function () { $("#AddPhotoDlg").dialog("open"); });
});
</script>
$(function(){
$("#JqPostForm").submit(function(e){
e.preventDefault();
$.post("process_form.php", $("#JqPostForm").serialize(),
function(data){
if(data.email_check == 'invalid'){
$("#message_post").html("<div class='errorMessage'>Sorry " + data.name + ", " + data.email + " is NOT a valid e-mail address. Try again.</div>");
} else {
$("#message_post").html("<div class='successMessage'>" + data.email + " is a valid e-mail address. Thank you, " + data.name + ".</div>");
}
}, "json");
});});
我建议您应该使用类似的东西来触发表单提交操作
我找到了这个问题和答案,我决定改变我的方法,使用HTML5来解决我的问题。谢谢,祝你好运。
使用HTML5,您可以使用Ajax和jQuery进行文件上传。不仅您可以进行文件验证(名称、大小和MIME类型)或使用HTML5进度标记(或div)处理进度事件。
据我所知,您无法使用$.post或Jquery的ajax上传文件。所以
$("#uploadProductPhotoForm").serialize()
不序列化文件输入。
您可以在提交功能中执行以下操作:
使用javascript:获取文件输入
var fileInput = document.getElementById("IdOfYourFileInput");
它将有一个包含所选文件的files
属性,然后您可以使用FormData
和XMLHttpRequest
上传它
var form = new FormData();
form.append("NameOfTheInput", fileInput.files[0]);
form.append("NameOftheId", id);//this is your productId
var xhr = new XMLHttpRequest();
xhr.open("POST", "/Product/AddProductPhoto/", true):
xhr.send(form);
相关文章:
- 使用jquery对话框中的箭头键
- 获取打开jquery对话框的button的id
- 我怎么能让jQuery对话框表现得像Javascript警报
- 无法在其他调用上设置jQuery对话框选项
- 如何在jQuery对话框标题栏中添加额外的按钮
- 从jquery对话框恢复原始数据,脚本不起作用
- Jquery对话框('打开')不工作
- 通过Rails中的自定义Jquery对话框处理链接的确认
- 阻止Jquery对话框内容的CSS应用于主窗口
- jquery对话框内容仅针对第一个请求进行对齐
- 在鼠标悬停时保持 JQuery 对话框打开
- 带有 iframe 的 jquery 对话框
- 单击函数生成的 jQuery 对话框中的元素
- 在jquery对话框中加载html页面
- JQuery对话框中的Bootstrap Pills
- JQUERY对话框未捕获错误:初始化之前无法调用对话框上的方法
- Jquery对话框的大小调整只发生在它的第一次's已打开
- 打开对话框后,JQuery对话框的条件调整大小为内容高度
- jquery对话框会记住以前的输入
- Jquery.对话框未从表中的图像输入打开