【问题标题】:MVC3 Razor: how to make a partial view conditionally loaded?MVC3 Razor:如何使局部视图有条件地加载?
【发布时间】:2011-11-08 10:02:59
【问题描述】:

我是 MVC3 的初学者,还在学习。我尝试编写一个应用程序(带有 Razor 的 MVC3),它允许用户选择文件并上传/保存。在上传/保存过程中,我只想将“等待”文本显示为部分视图。我遇到了问题,因为 Web 应用程序一启动就加载了部分视图,并且 HomeController - [HTtpPost] Wait 方法出错,因为它无法跟踪对象作业中的列表文件。当然,文件列表将在上传后填写。我不知道如何解决这个问题,需要你的帮助。提前谢谢你。

我的 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();
        }
    }

视图Index.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" />
}

【问题讨论】:

    标签: asp.net-mvc-3 razor partial-views


    【解决方案1】:

    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

    他们可能在某处有样品。我会看看我是否可以挖掘一些东西,但实际上我认为只听这个事件是你最好的选择,并且在客户端而不是服务器端这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多