我试图将两条信息从一个视图传递到另一个视图。从操作链接创建的URL使用查询字符串,而不是使用RouteConfig文件中定义的路由将参数放在URL中。
路线配置
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "UserDetail",
url: "{controller}/{action}/{system}/{id}",
defaults: new { controller = "Search", action = "UserDetails", system = UrlParameter.Optional, id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Search",
url: "{controller}/{action}/{searchText}",
defaults: new { controller = "Search", action = "Index", searchText = UrlParameter.Optional }
);
}
}
搜索结果视图
<table>
<thead>
<tr>
<td></td>
@foreach (DataColumn _col in Model.Columns)
{
<td>@_col.ColumnName</td>
}
</tr>
</thead>
<tbody>
@foreach (DataRow _row in Model.Rows)
{
<tr>
<td>
@Html.ActionLink("View", "UserDetails", "Search", new { system = _row["System"], id = _row["UserID"] }, null);
</td>
@foreach (DataColumn _col in Model.Columns)
{
<td>@_row[_col.ColumnName]</td>
}
</tr>
}
</tbody>
</table>
以下行始终创建使用查询字符串的URL ...
@Html.ActionLink("View", "UserDetails", "Search", new { system = _row["System"], id = _row["UserID"] }, null);
创造了什么:
http://localhost:54137/Search/UserDetails/91605?system=SP
我想要的是:
http://localhost:54137/Search/UserDetails/SP/91605
这是我正在使用的视图的控制器。
[HttpGet]
public ActionResult UserDetails(string system, int? id)
{
if (id == null || system == null || string.IsNullOrEmpty(system))
{
ViewBag.SearchResult = "No User ID was selected";
}
else
{
ViewBag.SearchResult = "You searched for User ID: " + id + " in the " + system + " system";
}
return View();
}
这是因为路由引擎只是按照您注册的顺序进行路由注册。似乎匹配的第一个将被选中。因此,您需要重新安排注册路线的顺序,从最具体的路线开始。
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "UserDetail",
url: "{controller}/{action}/{system}/{id}",
defaults: new { controller = "Search", action = "UserDetails", system = UrlParameter.Optional, id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Search",
url: "{controller}/{action}/{searchText}",
defaults: new { controller = "Search", action = "Index", searchText = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}