是否可以在ASP.NET MVC中的EditorTemplate中呈现另一个视图

时间:2011-05-24 18:49:26

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我需要在视图中显示评论列表。我已经为我的评论的Viewmodel类型创建了一个编辑器模板。我打电话给:

@Html.EditorFor(x => x.Comments)

循环并呈现个人评论。

现在,我还需要在列表中添加注释。添加到DB后,我需要使用jQuery将新的注释视图附加到当前列表。

我是否应该创建另一个部分视图来镜像EditorTemplate视图...或者首先在编辑器模板中的新视图上调用Html.RenderPartial?

希望有道理..

3 个答案:

答案 0 :(得分:1)

每个视图(无论是否为部分视图)都有自己的html帮助器属性。使用此属性您可以将部分视图调用到任意深度。在您的情况下,我建议为评论创建显示模板,因为您正在显示它们而不是编辑它们。它在功能方面没有任何区别,但它违反了惯例。例如,这是接受IEnumerable

的注释的显示模板
<%foreach(var x in Model){%>

<div> @x.CommentText</div>

<%} %>

然后你可以有一个局部视图渲染表格来添加新的评论,你可以把它放在另一个叫做评论的部分视图中接受类型评论的模型,例如

<%Html.BeginForm();%>
<div><%:Html.HiddenFor(x=>x.CommentID)%>
<%:Html.LabelFor(x=>x.CommentText)%>
</div>
<div>
<%:Html.TextAreaFor(x=>x.CommentText)%>
<input type='submit' value='save'/>
<%:Html.Endform();%>

我个人会从主视图(我从中调用Html.DisplayFor(x =&gt; x.Comments))调用此视图(呈现表单),因为它与显示注释列表不同。

答案 1 :(得分:0)

我只想创建一个部分视图:

@model SomeModel

@Html.EditorForModel()

如果需要return PartialView()来自动作方法,请使用它。

答案 2 :(得分:0)

通过提供包含一条评论的IEnumerable模型,您可以变得懒惰并使用相同的模板。

jQuery提供了一种从AJAX响应中挑选出片段的方法。请参阅“加载页面片段”here。只需为您的一条评论添加一个选择器,然后将其添加到列表中。