添加额外数据作为 url 的一部分而不是作为参数
Add extra data as part of url and not as parameter
所以我已经阅读了 MVC
中的 routes
并根据其他帖子中提到的内容进行了配置。所以我的目的是生成 url 如下:
http://domain.com/controller/action/id
为了这个目的,我配置了我的 RoutesConfig.cs
如下:
routes.MapRoute(
name: "AdminMessage",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Admin", action = "Messages", id = UrlParameter.Optional }
);
下面是我的控制器的样子
[HttpGet]
public ActionResult Messages(string id)
{
_model = new AdminViewModel();
_userName = Convert.ToString(HttpContext.User.Identity.Name);
ViewBag.Page = "Messages";
_model = PrepareLayoutModel(_userName, "Messages");
return View(_model);
}
我使用Url.Action
生成url
如下:
<a href="@Url.Action("Messages", "Admin", new RouteValueDictionary(new {message.MessageID}))"></a>
但它总是将 Url
生成为 http://domainname/controller/action?messageID=SDc@#123#2@
,而我想将其生成为 http://domainname/controller/action/SDc@#123#2@
。那么我可以通过什么方式完成这项工作?
这样试试:
<a href="@Url.Action("Messages", "Admin", new { id = message.MessageID })"></a>
甚至更好地使用 Html.ActionLink
助手,它将生成指向所需控制器操作并传递 id
路由参数值的锚标记:
@Html.ActionLink(
linkText: "",
actionName: "Messages",
controllerName: "Admin",
routeValues: new { id = message.MessageID },
htmlAttributes: null
)
也就是说,如果您打算在 url 的路由部分传递特殊字符,您应该 be prepared to suffer
。在这种情况下,我会简单地建议您使用查询字符串参数,这些参数可以安全地 url 编码而不会让您感到痛苦。所以基本上,如果您不控制此 MessageID
参数的格式并将其缩小为基本的字母数字字符,那么您完全不希望它成为您的路线段的一部分。
需要
@Url.Action("Messages", "Admin", new { ID = message.MessageID })
创建一个对象 属性 名为 ID
(与您的路线匹配),而不是您当前的实现使用名为 属性 的对象 MessageID
与您的路线不匹配,因此将其值添加为查询字符串值
所以我已经阅读了 MVC
中的 routes
并根据其他帖子中提到的内容进行了配置。所以我的目的是生成 url 如下:
http://domain.com/controller/action/id
为了这个目的,我配置了我的 RoutesConfig.cs
如下:
routes.MapRoute(
name: "AdminMessage",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Admin", action = "Messages", id = UrlParameter.Optional }
);
下面是我的控制器的样子
[HttpGet]
public ActionResult Messages(string id)
{
_model = new AdminViewModel();
_userName = Convert.ToString(HttpContext.User.Identity.Name);
ViewBag.Page = "Messages";
_model = PrepareLayoutModel(_userName, "Messages");
return View(_model);
}
我使用Url.Action
生成url
如下:
<a href="@Url.Action("Messages", "Admin", new RouteValueDictionary(new {message.MessageID}))"></a>
但它总是将 Url
生成为 http://domainname/controller/action?messageID=SDc@#123#2@
,而我想将其生成为 http://domainname/controller/action/SDc@#123#2@
。那么我可以通过什么方式完成这项工作?
这样试试:
<a href="@Url.Action("Messages", "Admin", new { id = message.MessageID })"></a>
甚至更好地使用 Html.ActionLink
助手,它将生成指向所需控制器操作并传递 id
路由参数值的锚标记:
@Html.ActionLink(
linkText: "",
actionName: "Messages",
controllerName: "Admin",
routeValues: new { id = message.MessageID },
htmlAttributes: null
)
也就是说,如果您打算在 url 的路由部分传递特殊字符,您应该 be prepared to suffer
。在这种情况下,我会简单地建议您使用查询字符串参数,这些参数可以安全地 url 编码而不会让您感到痛苦。所以基本上,如果您不控制此 MessageID
参数的格式并将其缩小为基本的字母数字字符,那么您完全不希望它成为您的路线段的一部分。
需要
@Url.Action("Messages", "Admin", new { ID = message.MessageID })
创建一个对象 属性 名为 ID
(与您的路线匹配),而不是您当前的实现使用名为 属性 的对象 MessageID
与您的路线不匹配,因此将其值添加为查询字符串值