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'))" }))
       {%>

しかし、以前は送信ボタンのオンクリックと呼ばれていました

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

私は修正し、その作業を行っています(送信ボタンのオンクリックとファイルアップロードコントロールのオンチェンジの検証とファイルアップロード)。

しかし、私の質問は、return false送信ボタンのクリックで機能しないのはなぜですか? ただし、 Fileupload onchange イベントでは機能します。

リダイレクトが発生した理由。同じ行を MVC フォームに変更した後、機能するようになりました (リダイレクトは現在行われていません)。

于 2013-05-21T14:36:38.373 に答える