使用Javascript函数阻止MVC表单提交

时间:2013-05-21 14:17:48

标签: javascript asp.net-mvc form-submit

我的项目中有一个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。但是表单被重定向到Above URL为什么。?

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

我怀疑是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>

2 个答案:

答案 0 :(得分: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事件工作。

为什么重定向发生了。?在将相同的Line更改为MVC Form后,它的工作(重定向现在没有发生)为什么。?

答案 1 :(得分:0)

将提交更改为:

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

它不会自动提交表格

当您准备好提交表单时,您可以使用回调函数中的javascript来执行此操作:

document.getElementById('form-id').submit();