我只是在观看斯科特Hanselman的演讲上ASP.NET 视在旧金山。后思考这一段时间,我被难住了如何以最好的方法建立一个ASP.NET 视-基于网站,有一个[portal|模块化|多视]结构(选择你最喜欢的定义)。

为了让你知道的我之后,我的公司建立了一个很大的门户网站式应用程序对于客户,将映射模块,可以应对它自己的查询串和路线,税收包裹的信息模块,同样具有其自己的观点(s)、文件检索图,显示单个和多文件...你的想法。关键的部分是,每个模块是真正的独立。如果一个用户的搜索,用于一个税务记录的名字,他们可能会看到10的结果("JOHN DOE"拥有的一些特性)。每个结果具有"地图"的链接,因为该网站应用程序框架都知道,有一个模块地图可用。的"地图"的链接发送正确的请求样 http://myapp.com/taxparcel/map/123443.地图模块控制器响应的外部请求,通过放大的地图,并强调税收包裹。

这整个流, 税收和测绘的模块是在同一网页。

所以如何适应ASP.NET 视箱?音?子的风景?多个视为一个单一的控制器吗?如果我只是丢失的明显的文件的一部分,然后随lambast我公开和包括的链接。否则我很开放的建议。

有帮助吗?

解决方案

嗯,你的视图模型的需要提供扩展点。我假定数据的图不包含这些模块的部分,并且是通过控制某种方式:

public ActionResult Search(string text)
{
   var model = seachService.Search(text)
   // here either:
   // 1. model contains .Modules collection and is populated by the service, or
   // 2. controller does
   var viewmodel = new SearchViewModel(model, modulesService.GetModulesFor(model));
   // i.e. it adds modules-specific information to the view data
   return View(model);
}

现在,该模块特定的数据转换的SearchViewModel到的东西,看可以使用:

public interface IModuleSpecificViewPart
{
  public IList<string> GetAdditionalLinksForUser();
  public void RenderAdditionalInfo(Response response);
}

和你看不会

<%= Model.Results[i] %>
<% foreach (var module in Model.ModuleSpecific) { %> 
<a href="<%=module.AdditionalLink%>">More</a> 
<% module.RenderAdditionalInfo(Response); %>
<% } %>

或模块视图模型可提供局部视图的名称、等等。注意到它的模块。GetModulesFor()和SearchViewModel,做的工作,例如,SearchViewModel可以做际奥委会。GetInstanceByType("ModuleViewModel"+passedModule.GetType().名称)-自动取具体模块的视图模型类。

这是这个想法。它可以,我明白你的问题完全是错误的-对不起如果是这样。

一个建议,我个人认为,如果我试图过通用的,它增加了不必要的并发症的项目(我甚至 写了 约)。I.e。是的你的模块是未知的,在编制时间但是你必须知道关于他们的东西!他们可能会增加链,以搜索的结果-这是扩展点。一个不能像扩展点为"任何",所以第一你需要列出具体的情况。

其他提示

我认为queen3的答复是更适合你的具体问题,但我想发表我的想法的一般性问题反正。

我在考虑做一些类似使用的技术讨论 马修*艾伯特's 博文.使用MEF,你可以放下一个新的dll到您的门户网站,以激活模块。

具有多个模块在一个页面上是有点骗子. RenderPartial 可以工作,但这一般是为加入代码的工作同样视图模型。 RenderAction 另一方面使用其自己控制和模型。我一般不会有利于使用 RenderAction 在任何其他情况下,因为它打破了,或者至少convolves的视模式。然而,在这种情况下,它只会用一个页面上,它是负责铺设了多个模块。所有的你的插件能够定期视景、控制和模型。

详细信息 RenderAction 可以找到 在这里,.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top