我是ASP.NET MVC 5的新手,我对部分视图有疑问。
在局部视图中,我放置了一个与名为comment的视图模型一起使用的表单,主视图与另一个照片模型一起使用。
我遇到的问题是我无法将照片的ID从主视图传递到包含评论模型的部分视图。
我试过了:
在主视图中:
@Html.Partial("CommentsPartial", new ViewDataDictionary() {{"id", @Model.PhotoID}})
在局部视图中:
@using (Html.BeginForm("AddComment", "PhotoSharing", FormMethod.Post, ViewData["id"]))
但ViewData["id"]
始终为空
答案 0 :(得分:0)
@using (Html.BeginForm("AddComment", "PhotoSharing", FormMethod.Post, ViewData["id"]))
应该呈现如下内容:
<form action="PhotoSharing/AddComment" method="Post" id="1">
如果您熟悉html,您应该知道表单元素上的属性不会传递回Web服务器。相反,你应该使用:
<input type="hidden" name="id" value="@ViewData["id"]" />
或更多Asp.Net MVC风格:
@Html.Hidden("id", ViewData["id"])
在回发时,您必须重新填充ViewData
,因为它不是有状态的:
public ActionResult AddComment(string id)
{
ViewData["id"] = id;
}
答案 1 :(得分:0)
在您的情况下,您需要使用此RenderPartial(HtmlHelper, String, ViewDataDictionary)
MSDN Link
像这样:
@Html.RenderPartial("PartialViewName", new ViewDataDictionary { { "id", Model.PhotoID } });
注意这将覆盖默认情况下所有其他视图都具有的默认ViewData。如果要向ViewData添加任何内容,则不会在此新字典中传递给您的部分视图。
并在部分视图中的任意位置访问上述ID ViewBag["id"]
。