我正在开发一个使用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按钮,我不知道..)。 单击该按钮时,它应该在我的控制器中调用“上传”方法。我只是不知道如何将文件发送到该方法
有谁知道怎么做? 或者欢迎任何其他建议!
我希望它有点清楚。
提前致谢。
最好的问候。
答案 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;将文件移动到永久文件夹或将其标记为永久文件夹...如果它不是有效文件或用户拒绝永久保存它我只会删除该文件。