我有一个 ASP.NET MVC 应用程序,它使用 jquery ui 对话框进行文件上传。使用正确的内容加载对话框并在我的点击事件上显示对话框时一切正常,但是我的问题是,在我处理控制器操作方法中的操作后,我不会返回到我的对话框,因为我期望一个 ajax喜欢要求行为。我的对话框是一个“方法=发布”的表单。我相信这是问题所在。当我发布表单时,我不再有对话框的上下文。如果我从我的表单标签中删除“method=post”,我会在我的控制器操作中得到一个 404 未找到。我会说我已经尝试了各种方法来做我想要完成的事情,但是每种方法都没有因为某种原因而奏效。最初我尝试了 .$(post) 方法来触发我的控制器操作,但发现 Request. 当我尝试在控制器操作中处理文件时,文件未设置。我也尝试使用 Html.BeginForm 而不是 html,但是我遇到了同样的问题,即不返回对话框。最终结果是一个空白的浏览器页面,上面写着 Success,这是我的操作方法的返回。我最近的尝试是使用 jquery 方法 .ajaxForm。这会调用我的操作并具有要上传的文件路径名称,但它也不会返回到对话框。这是我的代码:这会调用我的操作并具有要上传的文件路径名称,但它也不会返回到对话框。这是我的代码:这会调用我的操作并具有要上传的文件路径名称,但它也不会返回到对话框。这是我的代码:
aspx:
onClickButton: function () {
var data = $("#equipgrid").getRowData(curRow);
jQuery('#img_dialog').load("/EquipTrack/GetEquipImages/" + data.equip_id, {}, function (data) {
$("#img_results").html(data);
});
jQuery('#img_dialog').dialog('open');
return false;
$(function () {
$("#img_dialog").dialog({
bgiframe: true,
width: 540,
modal: true,
autoOpen: false,
resizable: false
})
});
$('#imageDlgForm').ajaxForm(function (data) {
alert(data);
alert("Thank you for your comment!");
});
我的 ascx(我正在使用部分视图来加载对话框内容):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%@ Import Namespace="ULS_Site.Models"%>
<form id="imageDlgForm" action="/EquipTrack/Upload" >
<p><input type="file" id="fileUpload" name="fileUpload" size="23"/> </p>
<p><input type="submit" value="Save" id="btnSave"/></p>
<p></p>
<center>
<ul style="list-style-type:none">
<% foreach (var item in ViewData.Model as IEnumerable<image>) %>
<%{%>
<li>
<img src="<%= item.image_path %>" alt=" " />
</li>
<%}%>
</ul>
</center>
<input type="hidden" id="hdnID" name="hdnID" value="38" />
</form>
我的控制器动作 c#:
public ActionResult Upload()
{
foreach (string inputTagName in Request.Files)
{
HttpPostedFileBase file = Request.Files[inputTagName];
if (file.ContentLength > 0)
{
string filePath = Path.Combine(HttpContext.Server.MapPath("../Content/equip_images")
, Path.GetFileName(file.FileName));
file.SaveAs(filePath);
}
}
return Content("Success");
}
}