Asp.net 在局部视图中访问Id的路由值
我试图从PartialView内部访问id的路由值。我有一个帖子,评论场景。我希望我的评论partialview可以访问PostId Url如下所示: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
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,您采取了哪些步骤来调用此操作?我猜不出你在这里想干什么。请描述您的具体场景,提供相关代码片段。。。如果你需要帮助的话,我真是太感谢你了!!我花了几个小时试图弄清楚如何通过身份证