我在使用 JQuery 时遇到了一个非常奇怪的问题。我有一个文件上传表单,用户可以在其中单击 2 个按钮:“保存文件”或“无图片”。两者调用同一个控制器来管理文件上传字段中是否有图片。
奇怪的是,只有在 fileupload 字段为空的情况下才会调用控制器。如果有人选择了一张图片,它只是没有进入控制器,这让我认为提交不起作用。但是我的 jquery 代码被调用并且总是返回 true ......
这是 document.ready 中的 JQuery 代码:
$('#ImgForm').on('submit', function () {
var fileUploader = document.getElementById("fileuploader");
$(fileUploader).hide();
var fileUploader = document.getElementById("informations");
$(fileUploader).show();
//Create a new image and insert it into the Images div. Just to be fancy,
//we're going to use a "FadeIn" effect from jQuery
var imgDiv = document.getElementById("Images");
loadingImg = new Image();
loadingImg.src = "../../Pictures/ajax-loader.gif";
//Hide the image before adding to the DOM
$(loadingImg).hide();
imgDiv.appendChild(loadingImg);
//Now fade the image in
$(loadingImg).fadeIn(500, null);
return true;
});
这是MVC视图代码:
@using (Html.BeginForm("UploadImage", "Recipe", FormMethod.Post,
new
{
enctype = "multipart/form-data",
id = "ImgForm",
name = "ImgForm",
target = "UploadTarget"
}))
{
<div id="fileuploader">
<h4>Étape 1: Choisir une photo</h4>
<input id="lefile" type="file" style="display:none" name="imageFile" accept="image/x-png, image/jpeg" />
<div class="input-append">
<input id="photoCover" class="input-large" type="text" />
<a class="btn" onclick="$('input[id=lefile]').click();">Parcourir...</a>
</div>
<script type="text/javascript">
$('input[id=lefile]').change(function () {
$('#photoCover').val($(this).val());
});
</script>
<input id="SaveImage" type="submit" class="btn btn-success" value="Sauvegarder l'image" />
<input id="SaveNoImage" type="submit" class="btn btn-danger" value="Aucune photo" />
</div>
}
我不会发布控制器代码,因为它只是在文件上传为空的情况下进入。
知道出了什么问题吗?谢谢
非常重要的编辑
今天我决定回到我的 SVN 历史并尝试看看发生了什么。我发现了一件非常奇怪的事情。如果我想让它工作,我需要在视图本身(Create.cshtml)中包含 jquery。我一直认为在 _layout.cshtml 中包含 jquery .js 文件是足够的,但事实并非如此!所以只有这样做,它才能在 Chrome 中运行。
我在 Internet Explorer 中仍然有一个错误,它阻止图像显示,因为 iframe 的“加载”事件启动:“运行时错误 Microsoft JScript:访问被拒绝”。它在 Chrome 中完美运行。任何想法???
编辑 2
评论中要求在 jsfiddle 中添加代码。我不太确定它是如何工作的,所以我复制了渲染的 html,剪切了 javascript 并将其放入 javascript 窗口中。它现在什么也没做,我不知道为什么,但至少你可以看到整个画面。希望能帮助到你。(请注意,与问题中的代码相比,我做了一些修改,但问题是一样的)。这里!