我想知道是否可以包装一个 ascx 文件,以便可以在不同的 View 中使用它,而不必将其输入到特定的模型中。
这意味着只要传入相关模型数据,您就可以将一个 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 页面(或 View )
谢谢大家。
最佳答案
我相信您要问的是是否可以重用许多 View ,例如单个 View 上的控件?如果是这样,你确实可以。在您的 View 中使用 Html.RenderPartial 操作。这将在您当前的 View 上呈现现有的“aspx”页面:
示例:
假设 Model.Dinners 是某种列表/枚举。
Dinners.aspx
<!--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 取出该晚餐,并相应地显示您的“晚餐”。
在您的主页中,您可以:然后执行类似 foreachdinner in mydinners 的操作,呈现 PartialControl。
详细示例:
你也可以使用RenderAction,这有同样的想法。但是,它将发布到您的 Controller 操作,该操作又返回一个 View :
<% Html.RenderAction(...); %>
这是一篇很棒的文章,介绍了两者之间的区别以及您应该使用的内容:
关于asp.net-mvc - ASP.NET MVC 是否可以在具有不同模型的多个 View 中使用 ascx 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074203/