asp.net-mvc - MVC 属性路由 Url.Action 无法解析路由

标签 asp.net-mvc routes url-routing asp.net-mvc-routing attributerouting

我无法让 @Url.Action 根据我应用的属性路由解析为我期望的 url:

我的操作(SearchController,但带有 [RoutePrefix("add")])

     [Route("{searchTerm}/page/{page?}", Name = "NamedSearch")]
     [Route("~/add")]
     public ActionResult Index(string searchTerm = "", int page = 1)
     {
       ...
     }

调用 Url.Action

@Url.Action("Index", new { controller = "Search", searchTerm = "replaceMe", page = 1 })

这会产生一个 url

/add?searchTerm=replaceMe&page=1

我希望

/add/replaceMe/page/1

如果我手动输入网址,那么它会解析为具有正确参数的正确操作。为什么 @Url.Action 无法解析正确的 url?

最佳答案

由于您已经为漂亮的路由定义起了一个名称,因此您可以使用 RouteUrl 方法。

@Url.RouteUrl("NamedSearch", new {  searchTerm = "replaceMe", page = 1})

由于您需要添加 url,因此您应该更新路由定义以将其包含在 url 模式中。

[Route("~/add")]
[Route("~/add/{searchTerm?}/page/{page?}", Name = "NamedSearch")]
public ActionResult Index(string searchTerm = "", int page = 1)
{
 // to do : return something
}

关于asp.net-mvc - MVC 属性路由 Url.Action 无法解析路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270852/

相关文章:

JavaScript 不向 Controller MVC 发送参数

c# - 是使用 TempData、Session 还是静态变量在同一 Controller 中的 ActionResults 之间共享相同的值更好?

asp.net-mvc - 如何在 Windows Azure 服务器上安装 MS Office

javascript - GET 请求返回空数组而不是数组内容

c# - 通过 Web API 中的 ModelBinding 将 JavaScript 对象反序列化为 Dictionary<string, string>

c# - .NET 核心 MvcHtmlString(TextboxFor, LabelFor).ToString() 错误

c# - 从所有网页中删除 .aspx

ruby-on-rails - 铁路路线问题

javascript - Node 中带有 Express 框架的动态路由

asp.net - Aps.Net 4.0 网络表单路由有效但没有避免 css jpg js 文件