C# 如何通过Routeconfig显示自定义URL
我有一个HTML的动作链接C# 如何通过Routeconfig显示自定义URL,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我有一个HTML的动作链接 <a href="@Url.Action("UserWisedPost", "Blog", new { userName = item.UserName,userId=item.UserId })">@item.UserName</a> 在RouteConfig routes.MapRoute( name: "userwisedPost", url: "{controller}/
<a href="@Url.Action("UserWisedPost", "Blog", new { userName = item.UserName,userId=item.UserId })">@item.UserName</a>
在RouteConfig
routes.MapRoute(
name: "userwisedPost",
url: "{controller}/{action}/{userName}",
defaults: new { controller = "Blog", action = "UserWisedPost", userName=UrlParameter.Optional}
);
你可能已经明白我的意思了。我想像。/UserWisedPost/userName那样显示URL,但希望通过控制器中的userId
访问数据
我该怎么做 我认为这里的问题是默认路径优先
我猜你在定制路线之前会有这样的情况:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
在此之前,您需要自定义路由,否则这将是处理到BlogController
的请求的路由
解决这个问题的简单方法如下:
routes.MapRoute(
name: "userwisedPost",
url: "Blog/{action}/{userName}",
defaults: new { controller = "Blog", action = "UserWisedPost", userName = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这将导致这样一个url:Blog/UserWisedPost/SomeUserName?userId=someUserId
如果您希望将userId
作为查询字符串以外的内容,则应添加一个表单并将其作为隐藏字段
或者,您可以使用AJAX发布数据:
<a href="postUserWised(@Url.Action("UserWisedPost", "Blog"), @item.UserName,@item.UserId)">@item.UserName</a>
然后在该视图的脚本部分:
@section scripts {
<script type="text/javascript">
function postUserWised( url, userName, userId) {
$.ajax({
url: url,
type: POST,
data: { userName: userName, userId: userId },
success: function(data) { },
error: function(...) { }
});
}
</script>
}
@节脚本{
函数positionrWised(url、用户名、用户ID){
$.ajax({
url:url,
类型:POST,,
数据:{userName:userName,userId:userId},
成功:函数(数据){},
错误:函数(…){}
});
}
}
我没有对此进行测试,但它应该为您指明了正确的方向。所以现在您有了这样的东西:。/UserWisedPost/userName?userId=123
对吗?如果是,问题是什么?您的控制器操作应该只将用户名
作为输入,然后在操作方法中,您需要一种方法将其转换为用户ID
。或者,您可以更改您的\u帖子
,以便能够通过用户名
获取帖子。但是我们不知道你的后端是如何构造的,所以没有人能给出你的问题的确切答案。我不想显示userid。但在控制器中,我想通过useridI访问数据,我不想在url中显示userid。但在controller中,我希望通过userId访问数据如果要将其作为url参数传递,则需要显示userId。唯一的其他方法是使用表单并发布值。然后他们就不会出现了,但这不是一个锚,而是一个要提交的表单。请参见以下答案:
@section scripts {
<script type="text/javascript">
function postUserWised( url, userName, userId) {
$.ajax({
url: url,
type: POST,
data: { userName: userName, userId: userId },
success: function(data) { },
error: function(...) { }
});
}
</script>
}