ASP.NET MVC Beta 路由、控制器操作、参数和 ActionsLinks...把它们放在一起

Posted

技术标签:

【中文标题】ASP.NET MVC Beta 路由、控制器操作、参数和 ActionsLinks...把它们放在一起【英文标题】:ASP.NET MVC Beta Routes, Controller Actions, Parameters and ActionsLinks...putting it all together 【发布时间】:2022-03-04 19:28:59 【问题描述】:

我在使用 ASP.NET MVC Beta 时遇到了一些问题,并且使路由、控制器操作、这些控制器操作上的参数和 html.ActionLinks 一起工作的想法。我有一个正在开发的应用程序,其中有一个名为 Plot 的模型对象和一个相应的 PlotController。当用户创建一个新的 Plot 对象时,会生成一个 URL 友好名称 (i.e.)。然后,我想生成属于用户的绘图的“列表”,每个绘图都是一个链接,可以将用户导航到该绘图详细信息的视图。我希望该链接的 URL 看起来像这样:http://myapp.com/plot/my-plot-name。我试图用下面的代码实现这一点,但它似乎不起作用,而且我似乎找不到任何好的示例来展示如何使所有这些一起工作。

我的路线定义:

routes.MapRoute( "PlotByName", "plot/name", new  controller = "Plot", action = "ViewDetails"  );

我的控制器动作:

[Authorize]
public ActionResult ViewDetails( string plotName )

    ViewData["SelectedPlot"] = from p in CurrentUser.Plots where p.UrlFriendlyName == plotName select p;
    return View();

至于 ActionLink,我不太确定生成适当的 URL 会是什么样子。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

答案很简单:您必须在“ActionLink”中提供足够的值来满足您的路线。示例:

<%= Html.ActionLink("Click Here", "ViewDetails", "Plot", new  name="my-plot-name" , null)%>

如果您省略 ActionLink 方法的“name=”部分,那么 RouteEngine 将不会将此链接视为“匹配”的足够好......所以它会转到默认路由。

上面的这段代码将使 URL 看起来像你想要的那样。

【讨论】:

【参考方案2】:

这个代码修复怎么样? (注意 name = null,附加到第 4 行的末尾....)

routes.MapRoute( 
    "PlotByName", 
    "plot/name", 
    new  controller = "Plot", action = "ViewDetails", name = null 
);

这应该被重命名..(注意 plotName 被重命名为 name

public ActionResult ViewDetails(string name )  ... 

这有帮助吗?

【讨论】:

以上是关于ASP.NET MVC Beta 路由、控制器操作、参数和 ActionsLinks...把它们放在一起的主要内容,如果未能解决你的问题,请参考以下文章

[十] ASP.NET Core MVC 中的路由

ASP.NET Core MVC 之控制器(Controller)

ASP.NET MVC教程五:ASP.NET MVC中的路由

自定义 ASP.NET MVC 404 错误页面的路由

asp.net mvc 路由约束正则表达式

[.net 面向对象程序设计深入].NET MVC 6 —— 模型视图控制器路由等的基本操作