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 之控制器(Controller)