Umbraco 7 更新 Umbraco 路线

2023-12-03

我正在尝试创建一个 Umbraco 7 MVC 应用程序。在此过程中,我希望能够创建在幕后管理数据的自定义控制器。通过我的研究,我发现使用 SurfaceController 是最成功的。但是,该路线将“/umbraco/surface/”添加到页面。例如,我的测试控制器和视图看起来像“/umbraco/surface/Test”。有没有办法管理这些路由并让它直接转到“/Test”而不添加 Umbraco 路由?任何有关如何在 Umbraco 7 中创建自定义控制器的指南都会很有帮助!


这就是我在我的项目中取得的成就。挖掘inet我找到了解决方案:

  1. In App_Code我创建的文件夹启动.cs有路线:

    using System.Web.Mvc;
    using System.Web.Routing;
    using Umbraco.Core;
    
    namespace mebli
    {
        public class MyStartupHandler : IApplicationEventHandler
        {
            public void OnApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
            {
                //Create a custom routes
    
                // News controller
                RouteTable.Routes.MapRoute(
                    "",
                    "News",
                    new
                    {
                        controller = "News",
                        action = "Index",
                        id = "0"
                    });
    
                RouteTable.Routes.MapRoute(
                    "",
                    "News/Index",
                    new
                    {
                        controller = "News",
                        action = "Index",
                        id = "0"
                    });
    
                RouteTable.Routes.MapRoute(
                    "",
                    "News/{id}",
                    new
                    {
                        controller = "News",
                        action = "Index",
                        id = UrlParameter.Optional
                    });
            }
    
            public void OnApplicationInitialized(
                UmbracoApplicationBase umbracoApplication,
                ApplicationContext applicationContext)
            {
            }
    
            public void OnApplicationStarting(
                UmbracoApplicationBase umbracoApplication,
                ApplicationContext applicationContext)
            {
            }
        }
    }
    

    在我的例子中,这可以让你拥有你想要的路线site.com/新闻, site.com/新闻/索引对于索引,site.com/News/123对于个别新闻。

  2. Then my 新闻管理员是这样的:

    using System.Globalization;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using Examine;
    using Umbraco.Core.Models;
    using Umbraco.Web;
    using Umbraco.Web.Models;
    using Umbraco.Web.Mvc;
    
    namespace mebli.Controllers
    {
        public class NewsController : PluginController
        {
            public NewsController()
                : this(UmbracoContext.Current)
            {
            }
    
            public NewsController(UmbracoContext umbracoContext)
                : base(umbracoContext)
            {
            }
    
            public ActionResult Index(string id)
            {
                var criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria("content");
                var filterNews = id == "0" ? criteria.NodeTypeAlias("News") : criteria.NodeTypeAlias("News").And().NodeName(id);
                var resultNews = Umbraco.TypedSearch(filterNews.Compile()).ToArray();
                if (!resultNews.Any())
                {
                    throw new HttpException(404, "No product");
                }
    
                if (id == "0")
                {
                    criteria = ExamineManager.Instance.DefaultSearchProvider.CreateSearchCriteria("content");
                    var filterNewsRepository = criteria.NodeTypeAlias("NewsRepository");
                    var newsRepository = Umbraco.TypedSearch(filterNewsRepository.Compile());
                    var renderModel = CreateRenderModel(newsRepository.First());
                    return View("NewsIndex", renderModel);
                }
                else
                {
                    var renderModel = CreateRenderModel(resultNews.First());
                    return View("News", renderModel);
                }
            }
    
            private RenderModel CreateRenderModel(IPublishedContent content)
            {
                var model = new RenderModel(content, CultureInfo.CurrentUICulture);
    
                //add an umbraco data token so the umbraco view engine executes
                RouteData.DataTokens["umbraco"] = model;
    
                return model;
            }
    
        }
    }
    

    它继承自 Umbraco插件控制器,别问为什么:)

  3. 第三,我有两个从控制器调用的视图 -新闻索引对于索引和News对于个别新闻。例如,我的 NewsIndex.cshtml 在这里:

    @inherits Umbraco.Web.Mvc.UmbracoTemplatePage
    @{
        Layout = "~/Views/Page.cshtml";
    }
    
    <div id="main-content" class="body news narrow">
        <h2>@Model.Content.GetPropertyValue("header")</h2>
        <ul>
            @foreach (IPublishedContent news in Model.Content.Children.OrderBy("date desc"))
            {
                <li>
                    <span>@Helpers.FormatDate(news.GetPropertyValue("date"))</span>
                    <div>
                        <a href="@Url.Action("Index", "News", new { id = news.Name })">@Helpers.StripHtml(news.GetPropertyValue("Brief").ToString())</a>
                    </div>
                </li>
            }
        </ul>
        <div class="clr"></div>
    </div>
    

其实我无法解释这段代码中的每一行,因为我不久前开始学习 ASP.Net MVC 和 Umbraco。但我认为这个想法很明确。它有效:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Umbraco 7 更新 Umbraco 路线 的相关文章

随机推荐

  • Java - 如何对非拉丁字符的 URL 路径进行编码

    目前有final URL url new URL urlString 但我遇到服务器不支持路径中的非 ASCII 的情况 使用 Java Android 我需要对 URL 进行编码 http acmeserver com download
  • 使用全局设置作为属性参数

    我想在属性中指定一个参数 如下所示 OutputCache Duration GlobalSettings GlobalVar 其中 GlobalVar 是我只定义一次的变量 不关心在哪里 使用配置设置无论如何都不起作用 而且我也无法让它与
  • 将行与数据帧 pandas 中的下一行合并

    我在 pandas 中有一个包含多列的数据框 我想将每一行与下一行合并 例子 输入数据框 A B C a1 a2 a3 b1 b2 b3 c1 c1 c3 d1 d2 d3 输出数据帧 A1 B1 C1 A2 B2 C2 a1 a2 a3
  • 如何使用 Dart HttpClient 发出 DELETE 请求?

    如果您使用的是 DartHttpClient 它提供了一个HttpClientRequest 从一台服务器向另一台服务器发出请求 据我所知 唯一可用的 HTTP 方法是GET and POST 分别对应于post postUrl and g
  • 为什么 rspec 不运行? Rspec 在启动后就挂起

    今天我跑不动了rspec在过去的一年里我每天都会测试很多次的项目 它打印前几行启动行 弃用警告等 然后挂起 几分钟过去了 没有任何额外的输出 Ctrl C 成功地用正常方式杀死了它 RSpec is shutting down and wi
  • RegisterPowerSettingsNotification C# pinvoke

    我正在尝试检测笔记本电脑盖子何时打开和关闭 应该非常简单 我似乎可以正确注册该事件 但是当我关闭笔记本电脑窗口时 我没有收到通知 这是 DLL 导入 DLL代码 http www pinvoke net default aspx user3
  • 如何使用 fastcgi 和 perlbrew 为在 nginx 上运行的 Perl Catalyst 应用程序创建初始化脚本

    我正在寻找一个 initscript 以便在运行 nginx 作为 Perl Catalyst 应用程序代理的网络服务器上使用 perlbrew 我目前正在尝试通过以下方式启动应用程序 source PERLBREW execute per
  • this:不能在静态上下文中使用 this

    你能帮我用下面的代码吗 错误是 无法在静态上下文中使用此 public class Sample2 param args public static void main String args Sample2 sam new Sample2
  • 将 boost numpy 与 Visual Studio 2019 和 python 3.8 结合使用

    我想将 Boost Numpy Boost 版本 1 72 与 Visual Studio 2017 和 Python 3 8 结合使用 在我的测试程序中 我收到链接错误 boost numpy38 vc141 mt gd x32 1 72
  • 如何通过代码打开窗口的系统菜单?

    我有一个 C WinForms 无边框窗口 我重写 WndProc 并处理 WM NCHITTEST 消息 对于这种形式的区域 我的命中测试函数返回 HTSYSMENU 双击该区域成功关闭窗体 但右键单击它不会显示窗口的系统菜单 在任务栏中
  • Core Data SUBQUERY 和 NSFetchedResultsController 的键路径错误

    如果这是重复的 我们深表歉意 20 分钟的搜索没有找到确切的情况或解决方案 我有一个包含三个类的核心数据堆栈XClass YClass and ZClass XClass与 具有一对多关系YClass YClass与 具有一对多关系ZCla
  • 为什么此 toDataURL 行是安全错误?

    如果将来自另一个站点的图像加载到页面 然后将其作为合成中的部分成分写入画布 请使用 context drawImage image 0 0 w h 似乎任何不安全的事情都已经在画布上发生了 那为什么会 window location can
  • 长按NavigationView只能作用于左侧部分,不能作用于所有NavigationLink?

    下面是一个NavigationView 视图弹出到Destination2当长按 NavigationLink 并Destination1正常点击时 但图中NavigationLink的右侧区域无法长按 有谁知道原因吗 谢谢 import
  • WIX:继续安装之前应关闭以下应用程序

    我的应用程序有托盘图标 当我卸载它时 我有一个窗口 其中建议关闭 my tray app exe 带有文本 在继续安装之前应关闭以下应用程序 我使用wix CloseApplication Element Util Extension 来关
  • 如何使用 javafx-maven-plugin 运行包含 jfoenix 的 Maven java fx 项目

    我试图创建编译我的应用程序并创建一个可执行文件 目前我认为最好使用的工具是 javafx maven plugin 我无法让它工作 所以我从根据此创建项目时生成的基本代码开始 https www youtube com watch v 4v
  • Google Gmail SMTP 设置不允许我使用 PHPMailer 发送电子邮件

    我在 Gmail 上创建了一个帐户 因为前一个帐户也给我带来了同样的问题 以便我的应用程序可以使用 google smtp 服务器发送电子邮件 我正在使用 PHPMailer 库并要求它显示任何日志错误 我总是收到类似的消息 它略有不同 有
  • Android 中的 RTSP 客户端

    可能有人问过同样的问题 但我没有找到任何适合我的解决方案 我正在尝试在 android 中播放 RTSP 流 服务器是 Darwin 流服务器 目前我尝试了VideoView和MediaPlayer 当我使用3G时 这两个都工作正常 但有时
  • 确定 PHP 调用函数的位置

    你们知道我如何从哪个文件中确定该函数内部调用的函数吗 我正在考虑使用 debug backtrace 但这看起来并不是一种优雅的方式 而且他们还在另一个问题中列举了其他原因here 那么还有什么其他选择呢 多谢 我前段时间从某个地方借用了这
  • 在 Angular2 路由中使用 Resolve

    在 Angular 1 中我的配置如下所示 routeProvider when news templateUrl newsView html controller newsController resolve message functi
  • Umbraco 7 更新 Umbraco 路线

    我正在尝试创建一个 Umbraco 7 MVC 应用程序 在此过程中 我希望能够创建在幕后管理数据的自定义控制器 通过我的研究 我发现使用 SurfaceController 是最成功的 但是 该路线将 umbraco surface 添加