我正在尝试从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,那么它就能正常工作。
答案 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...
}
);
}