ASP.NET如何呈现自定义模板并将其传递到主模板

时间:2011-07-06 05:43:11

标签: .net asp.net asp.net-mvc-2 templates

我可以在Django使用render_to(...)但ASP.NET。

中使用相同的内容

我需要在一个asp.net页面中提供不同的表单,所以我想渲染自定义表单模板并将其传递到主页面。

如何制作这些东西?

我试试这段代码

<%: Html.RenderPartial(ViewData["pd"].ToString(), ViewData)%>

我得到了

'System.Web.Mvc.HtmlHelper<dynamic>' does not contain a definition for 'RenderPartial' and the best extension method overload 'System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(System.Web.Mvc.HtmlHelper, string)' has some invalid arguments

苏丹

2 个答案:

答案 0 :(得分:1)

我不知道Django,但从您的描述中看起来您似乎在谈论部分观点。因此,您可以定义部分(~/Views/Home/Foo.ascx):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<div>some contents</div>

然后在主视图中包含它:

<%= Html.Partial("Foo") %>

更新:

现在您已经显示了代码,似乎您正在使用RenderPartial方法。此方法不返回任何内容。它直接写入输出。您使用不正确。它应该像这样使用:

<% Html.RenderPartial(ViewData["pd"].ToString()); %>

或者你也可以使用Partial helper:

<%= Html.Partial(ViewData["pd"].ToString()) %>

现在就传递信息到这个局部而言,我非常强烈建议你摆脱任何ViewData并使用强类型视图和视图模型。因此,例如,您将拥有此模型的强类型主视图:

public class MyViewModel
{
    public string Foo { get; set; }
    public SomeOtherViewModel Bar { get; set; }
}

然后你就可以做到这一点:

<%= Html.Partial(Model.Foo, Model.Bar) %>

然后将您的部分强力输入SomeOtherViewModel

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeOtherViewModel>" %>
<div><%: Model.SomePropertyOfBar %></div>

甚至更好,请使用templated helpers Html.DisplayFor and Html.EditorFor。它们是将部分内容包含在ASP.NET MVC应用程序中的最佳方式。

答案 1 :(得分:0)

如果您使用的是Web表单,则可以使用母版页。