gpt4 book ai didi

asp.net-mvc-3 - 如何确定 ASP.NET MVC 3 中是否存在 View ?

转载 作者:行者123 更新时间:2023-12-01 05:39:08 26 4
gpt4 key购买 nike

我正在实现一个新的 ASP.NET MVC 3 应用程序,该应用程序将使用一种动态路由形式来确定从通用 Controller 操作返回的 View 。如果动态位置没有 View ,我想要一个默认 View 。

把它想象成导航树结构。只有一个 TreeController 位于根 Controllers 文件夹中。它有一个 Browse 操作方法,可以接受要浏览的节点的路径。每个节点都可以有一个自定义 View ,因此我需要首先尝试定位该 View 并从操作方法中返回它,如下所示:

public ViewResult Browse(String path)
{
var model = ...;

return View(path, model);
}

因此,如果我导航到“MySite/Tree/A/B/C”,那么我希望在“\Views\Tree\A\B\C.aspx”中找到一个 View 。

但是,如果没有自定义 View ,我需要遵循标准/默认 View (例如“\Views\Tree\Browse.aspx”)。

由于这只是此操作方法的情况,我认为我不应该处理可能由于其他情况而导致的 NotFound 错误。而且,我不是在寻找其他帖子中描述的动态路由,因为 Controller 的路径是固定的。

最佳答案

Controller 不应该知道物理 View 。

您可以通过编写自定义 View 引擎来做到这一点,例如:

public class MyViewEngine: WebFormViewEngine
{
public MyViewEngine()
{
ViewLocationFormats = ViewLocationFormats.Concat(
new [] {"~/Views/{1}/Browse.aspx""}).ToArray();
// similarly for AreaViewLocationFormats, etc., if needed
}
}

有关详细信息,请参阅例如 WebFormViewEngine 的源代码。

如果您需要有条件地执行此操作(仅针对少数操作),那么您可以覆盖 FindView在该类型中并查看路由值。

显然,如果您使用 Razor,请改为使用 Razor。

然后,在 Global.asax.cs , 用它:
private void Application_Start(object sender, EventArgs e)
{
// stuff
ViewEngines.Engines.Add(new MyViewEngine());

关于asp.net-mvc-3 - 如何确定 ASP.NET MVC 3 中是否存在 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com