2

Telerik Controlsを利用するMVC3(razorview)アプリケーションを開発しています。だから私がしているのは次のとおりです。

ファイルをアップロードしたいのですが、検証を行います。ファイルが有効な場合、ファイルを永続的にアップロードするオプションをユーザーに提供したいと思います。有効でない場合、エラーが表示され、ユーザーはファイルをアップロードできません。

これは私がこれまでに持っているものです:

Javascriptコード:

<script type="text/javascript">
         function onSuccess(e) {
    if (jQuery.isEmptyObject(e.response.errors) && jQuery.isEmptyObject(e.response.warnings)) {
            $("#successmsg").show();
        } else {

            var errorMsg = "";
            if (!jQuery.isEmptyObject(e.response.errors)) {
                for (var i = 0; i < e.response.errors.length; i++) {
                    errorMsg = errorMsg + "<li>" + e.response.errors[i] + "</li>";
                }
            }
            if (errorMsg != "") {
                var strErrorContent = $("#errormsg_template").html();
                $("#errormsg").html(strErrorContent.replace("{0}", errorMsg));
                $("#errormsg").show();
            }
        }
    }

表示されているTelerikコンポーネント:

<p>
    @Html.Telerik().Upload().Name("file_upload").Multiple(false).Async(settings =>
   {
       settings.AutoUpload(false);
       settings.Save("Test", "Pricat");
   }).ClientEvents(events =>
   {
       events.OnError("onError");
       events.OnSuccess("onSuccess");
       events.OnUpload("onUpload");
   })
</p>

したがって、このコードは検証部分で機能しています。ユーザーがファイルを選択すると、ファイルがアップロードされ、内部処理によってメッセージが検証されます。メッセージが有効な場合、成功メッセージが表示されます。有効でない場合は、エラーが表示されます。

ファイルを再度参照せずに、アップロードを実行するボタン(基本的には別のメソッド呼び出し)を追加するにはどうすればよいですか?

だから次の

settings.Save("Test", "Pricat");

になる必要があります

settings.Save("Upload", "Pricat");

したがって、コントローラーには次の2つの方法があります。

public ActionResult Upload(HttpPostedFileBase file_upload) { }
public ActionResult Test(HttpPostedFileBase file_upload) { }

私が念頭に置いていたのは、javascriptで、e.reponseにエラーが含まれていない場合は、ボタンを表示することです(ASP.NETボタン、別のアップロードtelerikボタン、わかりません)。そのボタンをクリックすると、コントローラーの「アップロード」メソッドが呼び出されます。そのメソッドにファイルを送信する方法がわかりません

誰かがこれを行う方法を知っていますか?または、他の提案は大歓迎です!

少しはっきりしているといいのですが。

前もって感謝します。

よろしくお願いします。

4

2 に答える 2

2

最初にファイルを 2 回アップロードするのは非常に悪い習慣です。不必要な帯域幅を使用するだけでなく、ファイルの内容が要求間で同じままであることを実際に保証することはできません。

「テスト」メソッドは、成功した場合、ファイルを「検証済みだが永続的に保存されていない」状態でサーバー上のどこかに保存し、保存されたファイルへの参照をクライアントに返します。

ユーザーがファイルを永続的に保存することを決定した場合は、その参照を「アップロード」アクションに戻します。(したがって、実際にはファイルのアップロードをまったく含まないようにします)

おそらく、永続的に保存されたことのない検証済みのファイルを頻繁にパージしたいと思うでしょうが、それはプロセスを正しく行うために支払う代償としては少額です。

于 2012-11-18T05:01:53.273 に答える
1

ソリューションを主張する場合は、次のように送信ボタンを使用して ASP.MVC でファイルをアップロードできます: File Upload ASP.NET MVC 3.0

AJAX 投稿にしたい場合は、次のような jQuery コードを使用できます (onclick ボタン イベントで)。

$.ajax('<%= Url.Action("Upload", "MyFileController") %>', {
            async: async,
            data: $('#myFileForm').serialize(),
            success: function() { //something on success },
            error: function() { //something on error },
            type: 'POST',
            timeout: 10000
        }

しかし、@mootinatorが述べたように同様です。ファイルをサーバーに保存する方がよいでしょう(たとえば、一時テーブルまたはフォルダーに保存するか、ブール値でdbに一時的にフラグを立てるだけです)、検証し、ユーザーに永続的に保存するかどうかを尋ねます->ファイルを永続的に移動しますフォルダーまたは永続的なフラグを立てます...そして、それが有効なファイルではない場合、またはユーザーが永続的に保存することを拒否した場合、私は単にそのファイルを削除します。

于 2012-11-19T12:18:49.400 に答える