gpt4 book ai didi

asp.net-mvc - 如何在 ASP.NET MVC 中构建多 View 门户应用程序

转载 作者:行者123 更新时间:2023-12-01 13:23:09 25 4
gpt4 key购买 nike

我刚刚在旧金山观看了 Scott Hanselman 关于 ASP.NET MVC 的演讲。考虑了一段时间后,我对如何最好地构建具有 [门户|模块化|多 View ] 结构(选择您最喜欢的定义)的基于 ASP.NET MVC 的站点感到困惑。

为了让您了解我在追求什么,我的公司为我们的客户构建了许多门户样式的应用程序,这些应用程序包含一个映射模块,可以响应它自己的查询字符串和路线,征税包裹信息模块,类似地有自己的 View ,显示单个和多个文档的文档检索 View ......你明白了。关键部分是每个模块都是真正独立的。如果用户按姓名搜索税务记录,他们可能会看到 10 个结果(“JOHN DOE”拥有一些属性(property))。每个结果都有一个“Map it”链接,因为网站应用程序框架知道有一个可用的 map 模块。 “Map it”链接发送正确的请求,如 http://myapp.com/taxparcel/map/123443 . map 模块 Controller 通过缩放 map 并突出显示征税地 block 来响应外部请求。

整个流程的关键是税收和 map 模块都在同一个网页上。

那么它如何适应 ASP.NET MVC 框呢?偏音? subview ?单个 Controller 的多个 View ?如果我只是遗漏了文档中明显的部分,请随时公开抨击我并附上链接。否则我很乐意接受建议。

最佳答案

那么,您的 View 模型需要提供扩展点。我假设 View 的数据确实包含那些模块部分,并且由 Controller 以某种方式选择:

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 转换为 View 可以使用的数据:

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); %>
<% } %>

或者模块 View 模型可以提供部分 View 名称等。请注意,是 modules.GetModulesFor() 和 SearchViewModel 完成了这项工作 - 例如,SearchViewModel 可以执行 IoC.GetInstanceByType("ModuleViewModel"+ passedModule.GetType()。 Name) - 自动获取特定的模块 View 模型类。

这就是想法。可能是我对您的问题的理解完全错误 - 如果是这样,我深表歉意。

一个建议,我个人发现如果我尝试过于通用,它会给项目增加不必要的复杂性(我什至 wrote 关于它)。 IE。是的,你的模块在编译时是未知的,但你必须对它们有所了解!他们可能会添加指向搜索结果的链接 - 这是该链接的扩展点。无法为“任何东西”绘制扩展点,因此首先您需要列出您的具体案例。

关于asp.net-mvc - 如何在 ASP.NET MVC 中构建多 View 门户应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1597292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com