我在HTML中有一个操作链接。
<a href="@Url.Action("UserWisedPost", "Blog", new { userName = item.UserName,userId=item.UserId })">@item.UserName</a>
在控制器中,
public ActionResult UserWisedPost(string userId,string userName, int? page, int pageSize = 10)
{
page = page == null || page == 0 ? 1 : page;
var model = _post.GetByUserId(userId).ToPagedList((int)page, pageSize);
return View(model);
}
在RouteConfig中
routes.MapRoute(
name: "userwisedPost",
url: "{controller}/{action}/{userName}",
defaults: new { controller = "Blog", action = "UserWisedPost", userName=UrlParameter.Optional}
);
你可能已经理解了我的意思。我想显示../UserWisedPost/userName
之类的网址,但希望在控制器中按userId
访问数据。
我该怎么做?
答案 0 :(得分:1)
我认为这里的问题是默认路由优先。
我猜你在自定义路线之前有这个:
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 }
);
这会产生这样的网址:Blog/UserWisedPost/SomeUserName?userId=someUserId
答案 1 :(得分:1)
如果您想要查询字符串以外的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>
}
我没有对此进行测试,但它应该指向正确的方向。