【问题标题】:ASP.NET MVC Beta Routes, Controller Actions, Parameters and ActionsLinks...putting it all togetherASP.NET MVC Beta 路由、控制器操作、参数和 ActionsLinks...把它们放在一起
【发布时间】: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 会是什么样子。

任何帮助将不胜感激。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案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 ) { ... }
      

      这有帮助吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-30
        • 2012-05-29
        • 2011-03-20
        • 2012-08-14
        • 1970-01-01
        相关资源
        最近更新 更多