我想知道是否可以包装一个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页面(或视图)
谢谢大家。
答案 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>" %>