【问题标题】:ASP.Net MVC 3 - Single controller, single action and multiple viewsASP.Net MVC 3 - 单个控制器、单个动作和多个视图
【发布时间】:2011-09-06 17:08:30
【问题描述】:

我想知道让动作返回不同视图的最佳方法是什么。假设您有一个用于提交数据的表单,但您想根据提交的数据选择视图。我宁愿不使用重定向,因为我希望在发布的数据中显示一些内容。

这方面的一个例子是有一个编辑表单,它在单击保存时显示详细信息视图,但不使用重定向。

我知道这可以通过包含条件 if 语句来显示这个或那个的单个视图来完成,但是在某些情况下,我希望我的视图保持简单,而不需要太多代码。如果控制器可以在数据发布后选择要显示的视图,那就太好了。

【问题讨论】:

    标签: forms asp.net-mvc-3 view


    【解决方案1】:

    View() 方法有一个重载,允许您指定要返回的视图的名称。

    return View("DetailsView", model);
    

    【讨论】:

    • 但是,他不应该将其用于他的问题中所述的目的!
    • 感谢您提供的信息。现在,我可以做出明智的选择了。
    【解决方案2】:

    您应该使用 Post/Redirect/Get 模式。你仍然可以“展示东西”。您可以在 URI 上传递一个 ID,并在新的 GET 中查找它们或使用 TempData。

    试图绕过 Post/Redirect/Get 并不是一个好的解决方案。除其他外,它打破了后退按钮。

    【讨论】:

    • “应该”,为什么?如果没有必要,为什么要向数据库添加这个额外的往返行程?它会破坏后退按钮吗?假设您提交的数据有错误,所有将发生的是 Post 而不是 Post/Redirect/Get,并且返回按钮仍然有效。如果数据有效,为什么不这样做呢?所需要的只是根据数据的有效性提供不同的视图。
    • 在成功编辑后试图“优化”掉一个 DB 读取是愚蠢的。你真的认为这是你的应用程序中最慢的部分吗?至于 Post/Redirect/Get,既然已经写了这么多,为什么还要我重申模式的目的?你的提议有很多问题;请花时间研究模式。
    • 嗯,当然,数据库访问是我的应用程序中最慢的部分;这意味着访问磁盘和网络上的数据。不过谢谢,我会在不那么着急的时候对这种模式进行一些研究。
    • @Craig_Stuntz 您真的是指“后退”按钮,还是指“重新加载”按钮?因为在某些情况下,如果有人重新发布表单,我会发现问题。
    • 返回和重新加载都有问题。再次,请参阅 P/R/G 上已发布的信息——在 SO 评论中解释它并没有重新发明轮子。关于数据库性能,测量;不要猜。是的,数据库访问可能很慢,但这通常是显示信息列表时的一个因素——这在典型的应用程序中经常发生——而不是在发布后显示一条记录时——这发生的频率相对较低。 “优化”之前的配置文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 2011-11-21
    • 1970-01-01
    相关资源
    最近更新 更多