【问题标题】:How to create MVC5 ActionLink to root route -- without querystring如何创建 MVC5 ActionLink 到根路由——没有查询字符串
【发布时间】:2015-04-05 18:36:04
【问题描述】:

我正在创建一个 MVC 项目,我有一个共享的局部视图,我想要一个指向根站点的链接,并带有一个参数。所以https://site.invalid/j123456-123。我能够做到这一点的唯一方法是使用 HTML.Raw。我更喜欢使用更符合 MVC 约定的方法。

<a href="@Html.Raw(string.Format("/{0}", item.value))">@item.value</a> 
@Html.ActionLink(item.value,null, new{controller="MyController", action=string.Empty, parameter= item.value})

原始 html 方法有效,actionlink 生成/?parameter=J123456-123。我也不想要?或链接上显示的参数名称。

我最初尝试使用传统路由,但现在使用基于属性的路由。

我要使用的路线的属性是 [Route("~/{parameter:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")]

当我提出上述请求时,我的路由确实被调用了。

【问题讨论】:

    标签: .net asp.net-mvc-5


    【解决方案1】:

    Html.ActionLink 生成一个指向控制器动作的链接。因此,如果您尝试使用名为“parameter”的参数链接到名为“MyController”的控制器上名为“MyAction”的操作,您的链接将如下所示:

    @Html.ActionLink(item.value, "MyAction", "MyController", new { parameter = item.value }, null)
    

    你的控制器看起来像这样(假设你的正则表达式是正确的):

    public class MyController : Controller
    {
        [Route("~/{parameter:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")]
        public ActionResult MyAction(string parameter)
        {
            ...
        }
    }
    

    如果参数是“MyController”上的动作本身的名称,那么你需要这样传递它

    您的链接如下所示:

    @Html.ActionLink(item.value, item.value, "MyController")
    

    你的控制器看起来像这样(如果 item.value = "Parameter")

    public class MyController : Controller
    {
        [Route("~/Parameter")]
        public ActionResult Parameter()
        {
            ...
        }
    }
    

    如果您尝试链接到某个控制器上不是操作的内容,那么您应该只使用标准 html 和 Razor 来形成链接

    <a href="/@(item.value)">@item.value</a>
    

    【讨论】:

      【解决方案2】:

      使用 RouteLink 代替 ActionLink。使用使用路由名称的 RouteLink,然后将路由名称包含在 routeValues 对象中。

      @Html.RouteLink(linkText, "ViewByParam", new {controller= "controllerName", action="ViewByParam", id=item.Id})
      

      在控制器内部,使用属性:

      [Route("~/{id:regex([aAjJfF]\\d+-\\d+)}", Name = "ViewByParam")]
      public ActionResult ViewByParam(string id)
      

      至少这对我有用,我目前正在使用......

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-06
        • 2019-04-02
        • 1970-01-01
        • 1970-01-01
        • 2015-04-12
        • 2014-10-28
        相关资源
        最近更新 更多