JQuery文件上载对话框没有从MVC Controller操作返回到对话框

时间:2009-10-17 21:20:35

标签: jquery asp.net-mvc file-upload jquery-ui-dialog

我有一个ASP.NET MVC应用程序,它使用jquery ui对话框进行文件上传。一切正常,加载具有正确内容的对话框并在我的点击事件上显示对话框然而我的问题是,在我的控制器操作方法中处理动作后,我不会返回到我的对话框,因为我期望ajax喜欢呼唤行为。我的对话框是一个“method = post”的表单。我相信这是个问题。当我发布表单时,我不再有对话框的上下文。如果我从表单标签中删除“method = post”,我的控制器操作上找不到404。我会说我已经尝试了各种方法来完成我想要完成的工作,但是每种方法都因某种原因无效。最初我尝试使用。$(post)方法来触发我的控制器操作但发现当我尝试在我的控制器操作中处理它时,Request.Files没有被设置。我也尝试使用Html.BeginForm而不是html但是我遇到了同样的问题,没有返回到对话框。最终结果是一个空白的浏览器页面,其中包含Success,这是我的action方法的返回。我最近的尝试是使用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");
    }
}

1 个答案:

答案 0 :(得分:0)

通过从.load切换到$ .get,它修复了我的问题并处理了对话框并按预期返回。