在局部视图中访问Id的路径值

时间:2011-06-16 18:27:22

标签: asp.net asp.net-mvc

我正在尝试从PartialView内部访问id的Route值。我有一个帖子,评论场景。我希望我的评论部分视图可以访问PostId。

网址如下所示:

帖子/明细/ 2

现在,我如何在偏见视图中访问值2?

更新:

我将我的CommentsController更改为以下内容:

 public ActionResult Add(string id,string subject,string name,string body)
{

}

但是现在当我调试它时,它甚至没有进入Add方法。

更新2:

我的部分视图如下所示:

<div class="title">Add Comment</div>

@using (Html.BeginForm("Add","Comments",FormMethod.Post))
{
    @Html.Label("Subject") 
    @Html.TextBox("subject")
    <br />
    @Html.Label("Name") 
    @Html.TextBox("name") 
    <br />
    @Html.Label("Body") 
    @Html.TextBox("body") 




    <input type="submit" value="submit" />                            
}

这是控制器:

 public ActionResult Add(string id, string subject, string name, string body)

如果我从上面的控制器动作中删除了id,那么它就能正常工作。

2 个答案:

答案 0 :(得分:2)

您可以从RouteData

获取它

在WebForms中:

<% 
    var id = ViewContext.RouteData.Values["id"];
%>

在剃刀中:

@{
    var id = ViewContext.RouteData.Values["id"];
}

显示您的代码后,您的表单中似乎没有传递ID。所以修改它是这样的:

@using (Html.BeginForm("Add", "Comments", new { id = ViewContext.RouteData.Values["id"] }, FormMethod.Post))
{
    ...
}

或如果您愿意,请使用隐藏字段:

@using (Html.BeginForm("Add", "Comments", FormMethod.Post))
{
    @Html.Hidden("id", ViewContext.RouteData.Values["id"])
    ...
}

现在您应该在Add控制器操作中获取ID。

答案 1 :(得分:1)

在控制器内部,您可以将路径数据放入要发送到视图的视图模型中;然后,视图可以将其视图模型(或其部分)传递到局部视图。理想情况下,您的视图(包括部分视图)只需要依赖其视图模型提供的数据进行渲染。

public ActionResult Add(string id, string subject, string name, string body)
{
    return View(
        new AddedViewModel {
            Id = id,
            // etc...
        }
    );
}