2011-06-16 40 views
0

我想从PartialView中访问ID的路由值。我有一个帖子,评论场景。我希望我的评论partialview有权访问PostId。在部分视图中访问Id的路由值

的URL看起来如下:

帖子/详细信息/ 2

现在,我怎么能访问局部视图里面的值2?

UPDATE:

我改变了我的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

你可以从RouteData取,

在Web窗体:

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

在剃刀:

@{ 
    var id = ViewContext.RouteData.Values["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"]) 
    ... 
} 

现在你应该得到的ID在你Add控制器动作。

+0

反正从CommentsController内获取它还是我去取的评论视图中,然后把它放在隐藏字段,并将其发布到CommentsController的作用? – johndoe 2011-06-16 18:35:37

+0

@johndoe,如果你想在某个控制器上获取它,只需将其作为参数传递给action:'public ActionResult Foo(string id){...}'并且模型联编程序应该负责传递它。 – 2011-06-16 18:36:40

+0

@Darin Dimintrov我已经更新了我原来的问题。 – johndoe 2011-06-16 18:45:44

1

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

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