在没有文档类型

时间:2017-09-11 14:40:58

标签: c# url umbraco umbraco7 custom-url

我拥有什么

我正在使用Umbraco 7.6.6制作网站,我想访问我的客户端的第三方数据库。为此,我制作了一个名为QuestionsController的自定义控制器。在此我已经创建了一个动作:

public class QuestionsController : SurfaceController
{
    private QuestionService _questionService = new QuestionService();

    [HttpGet]
    public ActionResult Index()
    {
        return PartialView("~/Views/MacroPartials/Questions.cshtml", _questionService.ReadFile());
    }
}

此页面索引页面工作正常,此代码在我的文档类型视图中调用:

Html.RenderAction("index", "Questions");

概览页(只是图片)

这是我创建的模型

public class Question
{
    public int ID { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public User User { get; set; }
    public DateTime Created { get; set; }
    public List<Comment> Comments { get; set; }
}

我将

现在,我将创建一个详细信息页面,其中包含正面的更多信息。

[HttpGet]
[Route("~/questions/details/{id}")]
public ActionResult Details(int id)
{
    return View(_questionService.ReadFile().ElementAt(id));
}

重定向到该页面,我会这样做:

<a href="~/questions/details/@q.ID">@q.Title</a>

但这根本不起作用。详细信息页面为我提供了404 (找不到页面)错误。

问题

我现在的问题是:如何在没有文档类型的情况下创建~/questions/details/{id}等自定义网址?有谁可以帮助我?

1 个答案:

答案 0 :(得分:2)

以下是指南:

步骤1:添加控制器

制作您的控制器并从Controller而不是SurfaceController延伸并返回JsonResult而不是ActionResult

public class QuestionsController : Controller
{
    private QuestionService _questionService = new QuestionService();

    [HttpGet]
    public JsonResult Index()
    {
        return Json(_questionService.ReadFile());
    }
}

第2步:添加保留路径

将控制器路径添加到umbracoReservedPaths文件中的appSettings web.config密钥。 Umbraco的路由引擎将忽略添加到此列表中的任何路径。

<add key="umbracoReservedPaths" value="~/umbraco,~/install/,~/questions/" />

第3步:更改或添加global.asax.cs

更改或添加global.asax.cs以继承UmbracoApplication。打开global.asax.cs文件并更改此行:

public class MvcApplication : System.Web.HttpApplication

到此:

public class MvcApplication : UmbracoApplication

第4步:更改global.asax

global.asax更改为继承您的应用程序。这是抓住我的大问题,我不得不做很多搜索才能找到它!打开Global.asax文件(右键单击它并查看标记)并更改此行:

<%@ Application Codebehind="Global.asax.cs" Inherits="Umbraco.Web.UmbracoApplication" Language="C#" %>

到此:

<%@ Application Codebehind="Global.asax.cs" Inherits="MyProject.MvcApplication" Language="C#" %>

此示例中的MyProject是项目的基本命名空间。

第5步:删除默认RouteConfig.cs

如果存在,则从RouteConfig.cs删除默认自定义路由。如果你不删除这条路线,MVC将尝试路由每个请求,你的网站将显示空页面,这可能是一个很好的干净设计,但功能不是很好!

第6步:注册自定义路线

使用RegisterRoutes的{​​{1}}方法注册自定义路线。如果此文件不存在,请在文件夹RouteConfig.cs下创建一个。您必须为要使用的每条路线执行此操作:

App_Start

第7步:添加routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Questions", action = "Index", id = UrlParameter.Optional });

最后,您需要向OnApplicationStarted添加OnApplicationStarted覆盖方法。这将允许您添加应用程序以在启动时阅读global.asax.cs文件中的RegisterRoutes方法,并将刚刚设置的自定义路由添加到应用程序中:

RouteConfig.cs

第8步:代码清理

  1. 完成此步骤后,请删除下一行和文件。你不再需要了。

    protected override void OnApplicationStarted(object sender, EventArgs e)
    {
        base.OnApplicationStarted(sender, e);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
    
  2. 为每个操作创建视图。你可以像经典的MVC应用程序那样做。

  3. 来源:maffrigby.com (using custom routes in umbraco)