0

全部,假设您有这样的代码View

<img src='@Url.Action("GetCaptchaImg")' alt='' />

当然,控制器中有一个Action命名GetCaptchaImg,它返回一个FileContentResult给视图。

在 FireFox 中打开此视图后。我发现 Html 代码是

<img alt="" src="/Controllername/GetCaptchaImg" />

src不是真正的物理路径。所以我的问题是这个的真实物理路径是什么img,如何通过 Ajax 调用来更改图像Action?希望您能够帮助我 。谢谢。

4

1 回答 1

1

您可以对 actionresult 进行 ajax 调用,并从中返回图像的名称,并在 ajax 调用成功时更改图像 或者您可以执行此操作,我已在我的项目中实现了使您的 HTML 表单像这样

@using (Html.BeginForm("ActionResult", "Controller", FormMethod.Post, new { @id = "ImgForm", @enctype = "multipart/form-data", name = "ImgForm", target = "UploadTarget" }))
{
}

将 iframe 作为表单的目标

 <iframe id="UploadTarget" name="UploadTarget" onload="UploadImage_Complete();" style="position: absolute;
        left: -999em; top: -999em;"></iframe>

您的上传控制

然后上传图片并在表单上显示

 function UploadImage() {       
            $("#ImgForm").submit(); //form id
        }

        function UploadImage_Complete() {
            try {
                //Check to see if this is the first load of the iFrame
                if (isFirstLoad == true) {
                    isFirstLoad = false;
                    return;
                }

                //Reset the image form so the file won't get uploaded again
                document.getElementById("ImgForm").reset();
                //Grab the content of the textarea we named jsonResult .  This shold be loaded into 
                //the hidden iFrame.
                var newImg = $.parseJSON($("#UploadTarget").contents().find("#jsonResult")[0].innerHTML);

                if (newImg.IsValid) {
                    document.getElementById("dp").src = newImg.ImagePath;
                    document.getElementById('profile-pic').src = newImg.ThumbnailPath;
                    document.getElementById("change").style.display = "block";                          

                }

                // If there was an error, display it to the user
                if (newImg.IsValid == false) {
                    alert(newImg.Message);
                    return;
                }                      
            }
            catch (e) {
            }
        }

您的操作将如下所示

 public WrappedJsonResult ChangeImage(HttpPostedFileBase file)
{
}

你的 WrappedJsonResult 类看起来像

public class WrappedJsonResult : JsonResult
    {

        public override void ExecuteResult(ControllerContext context)
        {
            context.HttpContext.Response.Write("<html><body><textarea id=\"jsonResult\" name=\"jsonResult\">");
            base.ExecuteResult(context);
            context.HttpContext.Response.Write("</textarea></body></html>");
            context.HttpContext.Response.ContentType = "text/html";
        }

    }
于 2012-12-28T07:11:09.947 回答