代码之家  ›  专栏  ›  技术社区  ›  Chris Barry

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

  •  2
  • Chris Barry  · 技术社区  · 16 年前

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

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

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

    ps这是我要介绍的那种型号。

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

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

    基本上,您可以拥有一个非类型化的ascx页面(或视图)

    谢谢大家。

    2 回复  |  直到 16 年前
        1
  •  3
  •   Andrew    16 年前

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

    例子:

    假设Model.Dinners是某种类型的列表/枚举。

    晚餐

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

    晚餐.aspx

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

    像这样的东西在个人晚餐中也会起作用:

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

    这样你的 (“MyPartialView”/MyPartialView.aspx) ,将接受一种类型的晚餐。然后你可以通过 ViewData.Eval ,并相应地显示您的“晚餐”。

    在主页中,您可以: 然后在我的晚餐中做一些类似于每顿晚餐的事情,呈现一个PartialControl。

    这方面的一个详细示例:

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

    这是一篇很好的文章,介绍了它们之间的区别,您应该使用:

        2
  •  0
  •   jamesaharvey    16 年前

    您是否尝试过创建一个基础晚餐模型,其中6个随机晚餐类派生自该模型,然后仅使用用户控件:

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

    然后,控件的第一行应该是这样的:

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