我想知道这是否可行(看起来应该是这样)
我希望有一条路线,例如:
/ events / {id} / addcomment
其中{id}是用于标识要添加评论的事件的参数。我知道我可以简单地做/ events / addcomment / {id},但这不是我想要路由这个动作的方式,所以这是我到目前为止看到的其他SO帖子
我在global.asax文件中注册路由 -
routes.MapRoute(
"AddComment",
"Events/{id}/AddComment",
new { controller = "Events", action = "AddComment", id = "" }
);
然后我在我的事件控制器中的动作 -
[ActionName("{id}/AddComment")]
public ActionResult AddComment(int id)
{
Event _event = db.Events.Find(id);
var auth = OAContext.LoginRedirect("Must be logged in to add a comment");
if (auth != null)
return auth;
else if (_event == null)
return HttpNotFound();
else
return View(_event);
}
我在使用和不使用ActionName注释的情况下尝试了这个,并不完全确定我在这里做错了什么。
稍后我计划使用/ events / {eventId} / comment / {commentId} / {action}等路线,允许用户编辑/删除活动中的评论,但首先我需要弄清楚具体如何路由这个。
我问这个的原因是我没有看到任何其他参数样本在网址中进行操作,所以也许我只是不能这样做,如果是这样,那就好了。< / p>
我的问题:这种网址格式是否可行?若然,将此代码编码到路由和控制器中的正确方法是什么?
答案 0 :(得分:1)
这是一条应该有效的路线:
routes.MapRoute(
"AddComment",
"Events/{id}/AddComment",
new { controller = "Events", action = "AddComment" }
);
您无需在操作中使用任何ActionName属性即可。只需确保您已将此路线定义为之前您的默认路线。另请注意,由于{id}
路由参数不是路由定义的最后一部分,因此它不再是可选的。生成路径时,应始终为其指定值。
例如:
@Html.ActionLink(
"click me",
"AddComment",
"Events",
new { id = "123" },
null
)