Asp.net 在局部视图中访问Id的路由值

Asp.net 在局部视图中访问Id的路由值,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,我试图从PartialView内部访问id的路由值。我有一个帖子,评论场景。我希望我的评论partialview可以访问PostId Url如下所示: public ActionResult Add(string id,string subject,string name,string body) { } <div class="title">Add Comment</div> @using (Html.BeginForm("Add","Comments",For

我试图从PartialView内部访问id的路由值。我有一个帖子,评论场景。我希望我的评论partialview可以访问PostId

Url如下所示:

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

}
<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" />                            
}
员额/详情/2

现在,如何访问局部视图中的值2

更新:

我将CommentsController更改为以下内容:

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

}
<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" />                            
}
但是现在当我调试时,它甚至没有进入Add方法

更新2:

我的局部视图如下所示:

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

}
<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" />                            
}

如果我从上面的控制器操作中删除id,那么它就会工作。

您可以从
RouteData
获取它:

在网络表单中:

<% 
    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。

您可以从
RouteData
获取它:

在网络表单中:

<% 
    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"])
    ...
}

现在,您应该在
添加
控制器操作中获取id。

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

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

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

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

有没有办法从CommentsController内部获取它,或者我必须在Comments视图中获取它,然后将其放入隐藏字段并将其发布到CommentsController的操作中?@johndoe,如果您想在某个控制器上获取它,只需将其作为操作的参数:
public ActionResult Foo(string id){…}
模型绑定器应该负责传递它。@johndoe,为了调用此操作,您采取了哪些步骤?我猜不出你在这里想干什么。请描述您的具体场景,提供相关代码片段。。。如果你需要帮助的话,我真是太感谢你了!!在过去的几个小时里,我一直在试图弄清楚如何通过那里传递id,以便从CommentsController内部获取id,还是必须在Comments视图中获取id,然后将其放入隐藏字段并将其发布到CommentsController的操作?@johndoe,如果您想在某个控制器上获取它,只需将它作为操作的参数:
public ActionResult Foo(string id){…}
,模型绑定器应该负责传递它。@johndoe,您采取了哪些步骤来调用此操作?我猜不出你在这里想干什么。请描述您的具体场景,提供相关代码片段。。。如果你需要帮助的话,我真是太感谢你了!!我花了几个小时试图弄清楚如何通过身份证