ASP.NET MVC是否可以在具有不同模型的多个视图中使用ascx文件

时间:2010-01-15 19:28:31

标签: asp.net-mvc model-view-controller model

我想知道是否可以包装一个ascx文件,以便它可以在不同的视图中使用,而不必将其键入特定的模型。

这意味着只要传入相关的模型数据,就可以为多个页面使用一个ascx文件。

目前我正在为网站的不同部分复制我的ascx文件,但这感觉非常糟糕。

ps这是我传入的那种模式。

public class DinnerPage {
public Dinner dinner {get; set;} //main page data
public List<Dinner> Random6Dinners {get; set;} // ascx content
}

问题是如果我想使用呈现6个随机晚餐的ascx文件,但是对于不同的主页面,那么我必须以不同的方式键入它。

基本上,你有一个无类型的ascx页面(或视图)

谢谢大家。

2 个答案:

答案 0 :(得分:3)

我相信你问的是,你是否可以在一个视图上重复使用许多视图,例如控件?如果是这样,你的确可以。在视图中使用Html.RenderPartial操作。这将在您当前的视图中呈现现有的“aspx”页面:

示例:

假设Model.Dinners是某种List / Enumrable。

Dinners.aspx

<!--html-->

<%foreach(var dinner in Model.Dinners){%>
 <% Html.RenderPartial("~/DinnersFolder/Dinner.ascx", new { Dinner = dinner}); %>
<%}%>

<!--html-->

Dinner.aspx

 <%
  var dinner = ViewData.Eval("Dinner");
 %>
 <!--html-->

这样的东西适用于个人晚餐:

 <% Html.RenderPartial("Dinner", Model.Dinner); %> //Dinner being Dinner.ascx

这样你的(“MyPartialView”/ MyPartialView.aspx)就会采用一种晚餐。然后,您可以通过 ViewData.Eval 取出晚餐,并相应地显示您的“晚餐”。

在您的主页面中,您可以:然后在我的晚餐中执行类似foreach晚餐的操作,渲染PartialControl。

详细的例子:

你可以使用RenderAction,这有着同样的想法。但是,它会发送到您的Controllers操作,后者又返回一个视图:

<% Html.RenderAction(...); %> 

这是一篇很棒的文章,关于每个人之间的区别,你应该使用它们:

答案 1 :(得分:0)

您是否尝试过基本的晚餐模型,其中包含6个随机晚餐课程,然后只使用用户控件:

<%= Html.RenderPartial("DinnerControl", 
                       Model.RandomDinnerThatDerivesFromBaseDinner); %> 

然后你的控制的第一行应该是:

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<BaseDinner>" %>