我是MVC3的初学者,仍在学习。我尝试编写一个应用程序(MVC3与Razor),允许用户选择文件和上传/保存。在上传/保存过程中,我想简单地显示"等待"文本作为部分视图。我有问题,因为部分视图加载一旦web应用程序启动,我从HomeController - [HTtpPost]等待方法得到错误,因为它不能跟踪对象作业中的列表文件。当然,文件列表将在上传后填写。我不知道如何解决这个问题,需要你的帮助。提前谢谢你。
My HomeController.cs:
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult UploadFile(IEnumerable<HttpPostedFileBase> attachments)
{
foreach ( var file in attachments )
{
// do something
}
return RedirectToAction("Wait");
}
public ActionResult Wait()
{
// do something
ViewBag.Message = "Wait...";
return View();
}
[HttpPost]
public ActionResult Wait(FormCollection formCollection)
{
Work job = MvcApplication.GetWork();
if ( job.Files.Any() )
{
return RedirectToAction("SubmitWork");
}
else
{
return View();
}
}
视图索引。cshtml :
@{
ViewBag.Title = "FirstTry";
}
<p>
<div id="AddFiles">
@Html.Partial("_AddFiles")
</div>
</p>
<div id ="Wait">
@Html.Partial("_Wait")
</div>
部分视图_Wait。cshtml:
@{
ViewBag.Title = "Wait...";
}
@ViewBag.Message
@using ( Html.BeginForm("Wait", "Home", FormMethod.Post, new
{
id = "waitform"
}) )
{
}
<script type="text/javascript">
window.setTimeout("document.getElementById('waitform').submit()", 1000);
</script>
部分视图_AddFiles。cshtml :
@using ( Html.BeginForm("UploadFile", "Home", FormMethod.Post, new{id = "uploadForm", enctype = "multipart/form-data"}) )
{
@(Html.Telerik().Upload().Name("attachments").Multiple(true)
.Async(async => async.AutoUpload(true) )
)
<input type="submit" value="Send" class="t-button" />
<input type="reset" value="Reset" class="t-button" />
}
MVC不像WebForms那样工作,客户端事件不会传播到服务器控件(实际上甚至没有控件,我认为Telerik模糊了这条线,使MVC体验变得复杂)。
你可以在控制器中调用额外的动作来下载HTML或JSON或其他东西,但在客户端交换HTML而无需更改页面的唯一方法(因为上传正在进行中)将是使用javascript。
我不熟悉这个Telerik控件,但我认为你必须在客户端做一些事情,而不是在服务器端,来指示加载进度或显示一个旋转器。
他们的API显示有一个onupload
事件你可以监听和可能交换到加载div:
他们可能在某个地方有样本。我将看看是否能找到一些东西,但我真的认为只监听这个事件是您最好的选择,并且在客户端执行此操作,而不是在服务器端。