0

我想知道这是否可能(似乎应该是)

我想有一条路线,例如:

/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} 之类的路由,允许用户从事件中编辑/删除他们的评论,但首先我需要弄清楚如何路由这个.

我问这个的原因是我没有在 url 中看到任何其他参数执行操作的示例,所以也许我只是无法做到这一点,如果是这样的话,那就太好了。

我的问题:这种 url 格式是否可行,如果可以,将其编码到路由和控制器中的正确方法是什么?

4

1 回答 1

1

这是一条应该可行的路线:

routes.MapRoute(
   "AddComment",
   "Events/{id}/AddComment",
   new { controller = "Events", action = "AddComment" }
);

您无需在操作上使用任何 ActionName 属性即可。只需确保您在默认路由之前定义了此路由。另请注意,由于{id}路由参数不是路由定义的最后一部分,它不再是可选的。在生成路由时,您应该始终为其指定一个值。

例如:

@Html.ActionLink(
    "click me", 
    "AddComment", 
    "Events",
    new { id = "123" },
    null
)
于 2013-02-15T21:06:59.060 回答