【问题标题】:Simple MVC Question for MVC beginnerMVC初学者的简单MVC问题
【发布时间】:2010-01-14 02:37:14
【问题描述】:

我有一个 Ajax ActionLink,它通常只返回一个 PartialView(它只是一个 UserControl ascx 文件)但是,我的需求已经改变,我想返回另一个 PartialView(所以总共两个 PartialViews)占据我的不同区域页面...当然我不能连续两次调用“ return PartialView("UserControl.ascx") ”...所以我的问题是什么是一个优雅的解决方法?

如何在不将这两个 PartialView 包装在更大的父视图中的情况下返回两个 PartialView?我犹豫要不要这样做,因为这两个项目都在 html 表的不同部分,由于表的结构,这将要求我实际上将整个页面包含在父视图中,在这种情况下,大量的 html 数据将是不必要的在每次请求时发送到浏览器 - 破坏了 ajax 调用/部分更新的目的(如果我错了,请纠正我)。

【问题讨论】:

    标签: c# asp.net asp.net-mvc vb.net ajax


    【解决方案1】:

    对不起,我看错了,我以为你想静态调用一个动作方法。如果您想一键更新 2 个部分,那么我现在真的不知道您将如何使用包含的 api 进行更新。您可以做的是创建一个小 javascript(jquery!)来接管链接的点击,然后让脚本使用 ajax 加载呈现页面。

    我会在几分钟后发布一个示例:P

    <script src="../../Scripts/jquery-1.3.2.js" type="text/javascript"></script>
        <script language="javascript" type="text/javascript">
    
            $(document).ready(function () {
    
                  $("#TheLink").click(){        
                        $("#PlaceToUpdate1").load("/Controller/Method/View1");
                        $("#PlaceToUpdat2").load("/Controller/Method/View2");
    
                  }
    
                });
            }); 
        </script>
    

    我不确定这是否会完全像那样工作(没有编译器,只是在我的脑海中),但它就像那样。当然,链接应该是一个不做任何事情的虚拟链接,因为脚本是实际执行它的那个(尽管如果你发回 false 或类似的东西,你可以拦截链接方法)

    【讨论】:

    • 将使用hackery 作为最后的手段,希望找到优雅的解决方案,但是,只是一个问题,load 方法是否会异步加载这两个调用?还是只有在第一行完全完成后才能运行第二行?
    • 好吧 SO 帮助解决了这个问题,他们将执行 async stackoverflow.com/questions/2062241/…
    【解决方案2】:

    您可以在 HTML 辅助方法中手动构造部分视图。但是,该方法的可行性取决于部分视图是否会在其他页面中重用。我使用 HTML 辅助方法从头开始构建数据网格控件。我的一些页面有三个或四个由 jQuery 手风琴控件管理的数据网格,以减少屏幕占用空间。出于多种原因,我选择构建 HTML 帮助程序。首先,我希望在我的应用程序中使用这个控件。其次,我不想用一堆条件逻辑来加重我的观点。最后,我希望能够在视图中更改网格的配置(包括模型),这样每次更改时我都不必重新编译。网格支持 LINQ-to-SQL 模型和用户定义的类(使用反射),具有内置的分页器控件和支持网格中多个搜索字段的搜索机制。我还设置了列,以便它们可以显示格式化文本、链接到控制器操作或保存 mailto: 链接。在网格本身中,您可以定义模型以填充网格,可选择设置要显示的列,指定用于创建的操作和控制器,并指定用于删除的 JavaScript 函数(因为我使用 jQuery 对话框插件来获取确认消息)。所有这些更改都在视图本身中进行管理。

    学习如何利用 HTML 帮助器方法为您提供了最接近 MVC 提供的 ASP.NET 服务器控件的东西。

    【讨论】:

    • neil,这听起来太棒了,让我问你,当调用一个操作链接时,你是否能够更新使用自定义助手生成的所有这些视图?即:用户点击某些东西,我/你需要/想要更新页面的几个部分,在不同的区域......是吗?
    • 这实际上是我想要做的所有事情,而不是将我的一半业务逻辑紧密嵌入 js 中,另一半分散在服务器周围,打败了迁移到 mvc 的点......我只想做几个一次部分更新,就像你对 updatePanels 所做的那样,在一个回调期间一次更新它们:)
    • 当然只是补充一下,我在 100% ajax 中执行所有这些操作,除非用户移动到不同的页面,否则重新加载整个页面不是一种选择。
    • 帮助器的目的只是协助构建 HTML 视图。如果您使用 Ajax,您可能无法避免编写合理数量的 JavaScript,即使只是调用适当的控制器操作方法。我的数据网格还没有启用 Ajax,因为我想在开始添加 Ajax/jQuery 魔法之前确保它是稳定的。
    • 因此,如果您需要更新页面的 4 个部分,则需要进行 4 次客户端-服务器调用 (awch),而不是回到可以在一次调用和页面生命周期中完成的枯燥的 updatePanel 日子! ??天哪,这只是糟糕的框架设计!!像往常一样,一旦我开始了解它,VS 总是在我嘴里留下不好的味道,应该坚持使用网络表单! :(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    相关资源
    最近更新 更多