MVC上传控件

时间:2012-10-18 20:59:14

标签: asp.net-mvc telerik

我正在开发一个使用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");

所以在控制器中我有这两种方法:

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

我的想法: 在javascript中,如果e.reponse不包含错误,则显示一个按钮(ASP.NET按钮,另一个上传telerik按钮,我不知道..)。 单击该按钮时,它应该在我的控制器中调用“上传”方法。我只是不知道如何将文件发送到该方法

有谁知道怎么做? 或者欢迎任何其他建议!

我希望它有点清楚。

提前致谢。

最好的问候。

2 个答案:

答案 0 :(得分:2)

首先上传文件两次是一个非常糟糕的做法。这不仅会使用不必要的带宽,您也无法保证文件内容在请求之间保持不变。

如果成功,您的“测试”方法应将文件保存在服务器上某个“已验证但未永久保存”的状态,并将保存文件的引用返回给客户端。

如果用户决定永久保存文件,您可以将该引用传递回“上传”操作。 (从而使其实际上根本不涉及文件上传)

您可能希望清除经常验证的文件,这些文件从未经常永久保存,但要正确完成此过程,这是一个很小的代价。

答案 1 :(得分: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中用布尔值标记它),验证它,询问用户是否要永久保存它 - &gt;将文件移动到永久文件夹或将其标记为永久文件夹...如果它不是有效文件或用户拒绝永久保存它我只会删除该文件。