【问题标题】:separate UI files for multiple websites多个网站的单独 UI 文件
【发布时间】:2014-02-20 15:45:06
【问题描述】:

我们有一个网页设计项目。在这个项目中,我们有区域来分隔管理文件,这对于我们所有的网站都是一样的。我们希望在我们的 UI 项目中有多个主题,但每个主题都应该有自己的控制器和视图,用于选择和显示该主题的数据。我们不想为每个网站复制项目,因为只是 UI、控制器、视图和主题 HTML 文件不同。我们希望为每个网站创建一个文件夹,其中包含控制器、视图和主题,以及选择哪个作为默认设置的选项。 这可能吗?

【问题讨论】:

  • 为什么你需要单独的控制器来处理不同的主题?
  • 由于主题结构的原因,例如我们的一些主题在首页显示新闻,有些不是,有些网站是商店类型,有些是公司网站,所以我们每个主题的模型都不同
  • 查看子操作。所有这些子组件“模块”都可以通过子操作来处理,并且您可以只有一个控制器。

标签: asp.net-mvc user-interface themes


【解决方案1】:

对此类内容使用子操作。例如:

SomeController.cs

[ChildActionOnly]
public PartialViewResult News()
{
    var news = repo.News.GetLatest();
    return PartialView(news);
}

News.cshtml

@model IEnumerable<NewsItem>
<ul>
foreach (var item in Model)
{
    <li>@item.Title</li>
}
</ul>

_Layout.cshtml

@Html.Action("News", "SomeController")

这只是一个快速而肮脏的例子,但这里的想法是现在你的“新闻”与当前的控制器/动作分离。如果您想要一种布局中的新闻,只需将该调用添加到 Html.Action,如果您不想要一种布局中的新闻,只需将其省略即可。

【讨论】:

  • 我们可以对不同类型的主题有单独的操作,这样我们不需要单独的控制器,但我们需要为每个主题分开视图,因为主题,像 CustomViewEngine 这样的东西应该会有所帮助我们不知道如何
  • 一种可能的解决方案是传入视图以用作操作的参数:@Html.Action("News", "SomeController", new { view = "DifferentNews" })。然后将其传递给返回:return PartialView(view, news).
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多