在发布期间传递数据

时间:2014-04-30 22:46:25

标签: c# asp.net-mvc razor

我是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"]始终为空

2 个答案:

答案 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"]