0

我的项目中有一个upload.ascx。它将在 Jquery Popup 中加载。

upload.ascx包含File Upload控件。文件上传控件将上传.xlsx and .xls文件。我添加Java script了执行此验证的功能(以防止上传不必要的文件)。

Onchange of FileUpload控件和Onclick of Submit button相同的验证函数将被调用。

文件上传验证功能适用于这两个调用。如果用户单击提交按钮,则会调用相同的函数并正常工作。

我的问题是:在我的验证函数中我写了return false. 显示警报消息后,页面将被重定向到某个 URL ( localhost/Admin/Authorization/AcceptFile.aspx)。AcceptFile是我的 ActionResult 名称。它不应该发生。函数返回 False。但是表单被重定向到上面的 URL 为什么。?

我在我的操作结果中保留了调试器,如果它的文件错误(它是正确的),它不会被调用。如果它的文件正确,索引文件将加载成功消息(操作结果被调用并且工作正常)。.

我怀疑 MVC 表单。如果上传了错误的文件,则在没有调用 Action Result 的情况下发生重定向,这应该停止。

<% using (Html.BeginForm("AcceptFile", "Authorization", FormMethod.Post, new { enctype = "multipart/form-data" }))
       {%>

我的 Javascript 函数:

function checkfile(sender) {
        var validExts = new Array(".xlsx", ".xls");
        var fileExt = sender.value;
        var strValue = false;
        fileExt = fileExt.substring(fileExt.lastIndexOf('.'));
        if (validExts.indexOf(fileExt) < 0) {
            ShowMessage(-1, "Invalid file selected, valid files are .xlsx and .xls types.");
            strValue = false;
        }
        else {
            strValue = true;
        }
        return strValue;
    }

我的 upload.ascx 代码:

<div>
    <% using (Html.BeginForm("AcceptFile", "Authorization", FormMethod.Post, new { enctype = "multipart/form-data" }))
       {%>

          <input type="file" id="fileAuthorization" name="fileAuthorization" onchange="checkfile(this);" />

          <input type="submit" id="btnSave" name="btnSave" value="Upload" onclick="javascript:return checkfile(document.getElementById('fileAuthorization'))" />

    <%} %>
</div>
4

2 回答 2

4

我的自我我发现了问题。

是的,我的怀疑是正确的。问题是

onsubmit = "javascript:return checkfile(document.getElementById('fileAuthorization'))"

这应该在 Form 标签本身中这样调用:

 <% using (Html.BeginForm("AcceptFile", "Authorization", FormMethod.Post, new { enctype = "multipart/form-data", onsubmit = "javascript:return checkfile(document.getElementById('fileAuthorization'))" }))
       {%>

但之前它被称为提交按钮 Onclick

<input type="submit" id="btnSave" name="btnSave" value="Upload" onclick="javascript:return checkfile(document.getElementById('fileAuthorization'))" />

我已经更正并且它正在工作(验证和文件上传提交按钮 Onclick 和文件上传控件 onchange)。

但我的问题是为什么return false不能点击提交按钮?但它适用于 Fileupload onchange 事件。

为什么会发生重定向。?在将同一行更改为 MVC 表单后,它开始工作(重定向现在没有发生)为什么。?

于 2013-05-21T14:36:38.373 回答
1

将您的提交更改为:

<button type="button" id="btnSave" name="btnSave" onclick="checkfile(document.getElementById('fileAuthorization'))" ></button>

而且它不会自动提交表单

当您准备好提交表单时,您可以在回调函数中使用 javascript:

document.getElementById('form-id').submit();
于 2013-05-21T14:23:48.427 回答