Razor:如何使局部视图有条件加载



我是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:

http://www.telerik.com/help/aspnet-mvc/telerik-ui-components-upload-client-api-and-events.html

他们可能在某个地方有样本。我将看看是否能找到一些东西,但我真的认为只监听这个事件是您最好的选择,并且在客户端执行此操作,而不是在服务器端。

最新更新